救急``````````` 请问怎么在JTree里添加Checkbox还有``添加打开关闭的图片``????最好弄个列子来说明``` 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 添加CheckBox节点:import java.awt.BorderLayout;import java.awt.Color;import java.awt.Component;import java.awt.Font;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.awt.event.MouseEvent;import java.util.EventObject;import java.util.Vector;import javax.swing.AbstractCellEditor;import javax.swing.JCheckBox;import javax.swing.JFrame;import javax.swing.JScrollPane;import javax.swing.JTree;import javax.swing.UIManager;import javax.swing.event.ChangeEvent;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.DefaultTreeCellRenderer;import javax.swing.tree.TreeCellEditor;import javax.swing.tree.TreeCellRenderer;import javax.swing.tree.TreePath;public class CheckBoxNodeTreeSample { public static void main(String args[]) { JFrame frame = new JFrame("CheckBox Tree"); CheckBoxNode accessibilityOptions[] = { new CheckBoxNode( "Move system caret with focus/selection changes", false), new CheckBoxNode("Always expand alt text for images", true) }; CheckBoxNode browsingOptions[] = { new CheckBoxNode("Notify when downloads complete", true), new CheckBoxNode("Disable script debugging", true), new CheckBoxNode("Use AutoComplete", true), new CheckBoxNode("Browse in a new process", false) }; Vector accessVector = new NamedVector("Accessibility", accessibilityOptions); Vector browseVector = new NamedVector("Browsing", browsingOptions); Object rootNodes[] = { accessVector, browseVector }; Vector rootVector = new NamedVector("Root", rootNodes); JTree tree = new JTree(rootVector); CheckBoxNodeRenderer renderer = new CheckBoxNodeRenderer(); tree.setCellRenderer(renderer); tree.setCellEditor(new CheckBoxNodeEditor(tree)); tree.setEditable(true); JScrollPane scrollPane = new JScrollPane(tree); frame.getContentPane().add(scrollPane, BorderLayout.CENTER); frame.setSize(300, 150); frame.setVisible(true); }}class CheckBoxNodeRenderer implements TreeCellRenderer { private JCheckBox leafRenderer = new JCheckBox(); private DefaultTreeCellRenderer nonLeafRenderer = new DefaultTreeCellRenderer(); Color selectionBorderColor, selectionForeground, selectionBackground, textForeground, textBackground; protected JCheckBox getLeafRenderer() { return leafRenderer; } public CheckBoxNodeRenderer() { Font fontValue; fontValue = UIManager.getFont("Tree.font"); if (fontValue != null) { leafRenderer.setFont(fontValue); } Boolean booleanValue = (Boolean) UIManager .get("Tree.drawsFocusBorderAroundIcon"); leafRenderer.setFocusPainted((booleanValue != null) && (booleanValue.booleanValue())); selectionBorderColor = UIManager.getColor("Tree.selectionBorderColor"); selectionForeground = UIManager.getColor("Tree.selectionForeground"); selectionBackground = UIManager.getColor("Tree.selectionBackground"); textForeground = UIManager.getColor("Tree.textForeground"); textBackground = UIManager.getColor("Tree.textBackground"); } public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) { Component returnValue; if (leaf) { String stringValue = tree.convertValueToText(value, selected, expanded, leaf, row, false); leafRenderer.setText(stringValue); leafRenderer.setSelected(false); leafRenderer.setEnabled(tree.isEnabled()); if (selected) { leafRenderer.setForeground(selectionForeground); leafRenderer.setBackground(selectionBackground); } else { leafRenderer.setForeground(textForeground); leafRenderer.setBackground(textBackground); } if ((value != null) && (value instanceof DefaultMutableTreeNode)) { Object userObject = ((DefaultMutableTreeNode) value) .getUserObject(); if (userObject instanceof CheckBoxNode) { CheckBoxNode node = (CheckBoxNode) userObject; leafRenderer.setText(node.getText()); leafRenderer.setSelected(node.isSelected()); } } returnValue = leafRenderer; } else { returnValue = nonLeafRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus); } return returnValue; }}class CheckBoxNodeEditor extends AbstractCellEditor implements TreeCellEditor { CheckBoxNodeRenderer renderer = new CheckBoxNodeRenderer(); ChangeEvent changeEvent = null; JTree tree; public CheckBoxNodeEditor(JTree tree) { this.tree = tree; } public Object getCellEditorValue() { JCheckBox checkbox = renderer.getLeafRenderer(); CheckBoxNode checkBoxNode = new CheckBoxNode(checkbox.getText(), checkbox.isSelected()); return checkBoxNode; } public boolean isCellEditable(EventObject event) { boolean returnValue = false; if (event instanceof MouseEvent) { MouseEvent mouseEvent = (MouseEvent) event; TreePath path = tree.getPathForLocation(mouseEvent.getX(), mouseEvent.getY()); if (path != null) { Object node = path.getLastPathComponent(); if ((node != null) && (node instanceof DefaultMutableTreeNode)) { DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) node; Object userObject = treeNode.getUserObject(); returnValue = ((treeNode.isLeaf()) && (userObject instanceof CheckBoxNode)); } } } return returnValue; } public Component getTreeCellEditorComponent(JTree tree, Object value, boolean selected, boolean expanded, boolean leaf, int row) { Component editor = renderer.getTreeCellRendererComponent(tree, value, true, expanded, leaf, row, true); // editor always selected / focused ItemListener itemListener = new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { if (stopCellEditing()) { fireEditingStopped(); } } }; if (editor instanceof JCheckBox) { ((JCheckBox) editor).addItemListener(itemListener); } return editor; }}class CheckBoxNode { String text; boolean selected; public CheckBoxNode(String text, boolean selected) { this.text = text; this.selected = selected; } public boolean isSelected() { return selected; } public void setSelected(boolean newValue) { selected = newValue; } public String getText() { return text; } public void setText(String newValue) { text = newValue; } public String toString() { return getClass().getName() + "[" + text + "/" + selected + "]"; }}class NamedVector extends Vector { String name; public NamedVector(String name) { this.name = name; } public NamedVector(String name, Object elements[]) { this.name = name; for (int i = 0, n = elements.length; i < n; i++) { add(elements[i]); } } public String toString() { return "[" + name + "]"; }} 至于打开关闭图片,只要在treemodel中设置openicon和closedicon就可以了初始显示的图片,需要在treecellrenderer中自己设定 关于包中的类的导入问题,求助~~~~谢谢 拆字符串,放到ArrayList里面; 求一个正则表达式 轻松拿到这20分 抽象类InputStream为什么可以生成实例java.lang.System.in? java的例外处理机制问题 有没有时间类呢? 终于到5个三角了,散分! 请问谁知道这个组件!!!!?? 参加过考试的看过来 java如何异步调用一个方法? 请大家推荐几本学JAVA入门的好书(电子版的)最好还有下载地址的,先谢谢啦~
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import java.util.Vector;import javax.swing.AbstractCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.UIManager;
import javax.swing.event.ChangeEvent;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;
import javax.swing.tree.TreeCellEditor;
import javax.swing.tree.TreeCellRenderer;
import javax.swing.tree.TreePath;public class CheckBoxNodeTreeSample {
public static void main(String args[]) {
JFrame frame = new JFrame("CheckBox Tree"); CheckBoxNode accessibilityOptions[] = {
new CheckBoxNode(
"Move system caret with focus/selection changes", false),
new CheckBoxNode("Always expand alt text for images", true) };
CheckBoxNode browsingOptions[] = {
new CheckBoxNode("Notify when downloads complete", true),
new CheckBoxNode("Disable script debugging", true),
new CheckBoxNode("Use AutoComplete", true),
new CheckBoxNode("Browse in a new process", false) };
Vector accessVector = new NamedVector("Accessibility",
accessibilityOptions);
Vector browseVector = new NamedVector("Browsing", browsingOptions);
Object rootNodes[] = { accessVector, browseVector };
Vector rootVector = new NamedVector("Root", rootNodes);
JTree tree = new JTree(rootVector); CheckBoxNodeRenderer renderer = new CheckBoxNodeRenderer();
tree.setCellRenderer(renderer); tree.setCellEditor(new CheckBoxNodeEditor(tree));
tree.setEditable(true); JScrollPane scrollPane = new JScrollPane(tree);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}class CheckBoxNodeRenderer implements TreeCellRenderer {
private JCheckBox leafRenderer = new JCheckBox(); private DefaultTreeCellRenderer nonLeafRenderer = new DefaultTreeCellRenderer(); Color selectionBorderColor, selectionForeground, selectionBackground,
textForeground, textBackground; protected JCheckBox getLeafRenderer() {
return leafRenderer;
} public CheckBoxNodeRenderer() {
Font fontValue;
fontValue = UIManager.getFont("Tree.font");
if (fontValue != null) {
leafRenderer.setFont(fontValue);
}
Boolean booleanValue = (Boolean) UIManager
.get("Tree.drawsFocusBorderAroundIcon");
leafRenderer.setFocusPainted((booleanValue != null)
&& (booleanValue.booleanValue())); selectionBorderColor = UIManager.getColor("Tree.selectionBorderColor");
selectionForeground = UIManager.getColor("Tree.selectionForeground");
selectionBackground = UIManager.getColor("Tree.selectionBackground");
textForeground = UIManager.getColor("Tree.textForeground");
textBackground = UIManager.getColor("Tree.textBackground");
} public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row,
boolean hasFocus) { Component returnValue;
if (leaf) { String stringValue = tree.convertValueToText(value, selected,
expanded, leaf, row, false);
leafRenderer.setText(stringValue);
leafRenderer.setSelected(false); leafRenderer.setEnabled(tree.isEnabled()); if (selected) {
leafRenderer.setForeground(selectionForeground);
leafRenderer.setBackground(selectionBackground);
} else {
leafRenderer.setForeground(textForeground);
leafRenderer.setBackground(textBackground);
} if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value)
.getUserObject();
if (userObject instanceof CheckBoxNode) {
CheckBoxNode node = (CheckBoxNode) userObject;
leafRenderer.setText(node.getText());
leafRenderer.setSelected(node.isSelected());
}
}
returnValue = leafRenderer;
} else {
returnValue = nonLeafRenderer.getTreeCellRendererComponent(tree,
value, selected, expanded, leaf, row, hasFocus);
}
return returnValue;
}
}class CheckBoxNodeEditor extends AbstractCellEditor implements TreeCellEditor { CheckBoxNodeRenderer renderer = new CheckBoxNodeRenderer(); ChangeEvent changeEvent = null; JTree tree; public CheckBoxNodeEditor(JTree tree) {
this.tree = tree;
} public Object getCellEditorValue() {
JCheckBox checkbox = renderer.getLeafRenderer();
CheckBoxNode checkBoxNode = new CheckBoxNode(checkbox.getText(),
checkbox.isSelected());
return checkBoxNode;
} public boolean isCellEditable(EventObject event) {
boolean returnValue = false;
if (event instanceof MouseEvent) {
MouseEvent mouseEvent = (MouseEvent) event;
TreePath path = tree.getPathForLocation(mouseEvent.getX(),
mouseEvent.getY());
if (path != null) {
Object node = path.getLastPathComponent();
if ((node != null) && (node instanceof DefaultMutableTreeNode)) {
DefaultMutableTreeNode treeNode = (DefaultMutableTreeNode) node;
Object userObject = treeNode.getUserObject();
returnValue = ((treeNode.isLeaf()) && (userObject instanceof CheckBoxNode));
}
}
}
return returnValue;
} public Component getTreeCellEditorComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf, int row) { Component editor = renderer.getTreeCellRendererComponent(tree, value,
true, expanded, leaf, row, true); // editor always selected / focused
ItemListener itemListener = new ItemListener() {
public void itemStateChanged(ItemEvent itemEvent) {
if (stopCellEditing()) {
fireEditingStopped();
}
}
};
if (editor instanceof JCheckBox) {
((JCheckBox) editor).addItemListener(itemListener);
} return editor;
}
}class CheckBoxNode {
String text; boolean selected; public CheckBoxNode(String text, boolean selected) {
this.text = text;
this.selected = selected;
} public boolean isSelected() {
return selected;
} public void setSelected(boolean newValue) {
selected = newValue;
} public String getText() {
return text;
} public void setText(String newValue) {
text = newValue;
} public String toString() {
return getClass().getName() + "[" + text + "/" + selected + "]";
}
}class NamedVector extends Vector {
String name; public NamedVector(String name) {
this.name = name;
} public NamedVector(String name, Object elements[]) {
this.name = name;
for (int i = 0, n = elements.length; i < n; i++) {
add(elements[i]);
}
} public String toString() {
return "[" + name + "]";
}
}
初始显示的图片,需要在treecellrenderer中自己设定