package dccserverconfig;import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.*;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import java.util.Vector;
import javax.swing.tree.*;
import javax.swing.AbstractCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.*;
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 dccDeviceTree {
public static void main(String args[]) {
JFrame frame = new JFrame("CheckBox Tree"); final Vector device = new Vector();
for (int i = 0; i < 5; i++) {
CheckBoxNode node = new CheckBoxNode("Use AutoComplete" + i, true);
device.add(node);
}
CheckBoxNode a = new CheckBoxNode("Use", true);
Vector station = new NamedVector(a, device);
Vector rootVector = new Vector();
rootVector.add(station);
JButton test=new JButton("test");
test.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
for(int i=0;i<device.size();i++)
{
CheckBoxNode node2= (CheckBoxNode) device.elementAt(i);
System.out.println("node2.getText()=" + node2.getText());
System.out.println("node2.isSelected()=" + node2.isSelected());
}
}
});
//Create Tree
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.add(test,BorderLayout.NORTH);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.event.*;
import java.awt.event.ItemListener;
import java.awt.event.MouseEvent;
import java.util.EventObject;
import java.util.Vector;
import javax.swing.tree.*;
import javax.swing.AbstractCellEditor;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.*;
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 dccDeviceTree {
public static void main(String args[]) {
JFrame frame = new JFrame("CheckBox Tree"); final Vector device = new Vector();
for (int i = 0; i < 5; i++) {
CheckBoxNode node = new CheckBoxNode("Use AutoComplete" + i, true);
device.add(node);
}
CheckBoxNode a = new CheckBoxNode("Use", true);
Vector station = new NamedVector(a, device);
Vector rootVector = new Vector();
rootVector.add(station);
JButton test=new JButton("test");
test.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
for(int i=0;i<device.size();i++)
{
CheckBoxNode node2= (CheckBoxNode) device.elementAt(i);
System.out.println("node2.getText()=" + node2.getText());
System.out.println("node2.isSelected()=" + node2.isSelected());
}
}
});
//Create Tree
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.add(test,BorderLayout.NORTH);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
implements TreeCellRenderer {
private JCheckBox leafRenderer = new JCheckBox(); 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 (true) {
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;
}
return returnValue;
}
}class CheckBoxNodeEditor
extends AbstractCellEditor implements TreeCellEditor { CheckBoxNodeRenderer renderer = new CheckBoxNodeRenderer();
boolean selectedStatementboolean=true;
ChangeEvent changeEvent = null; JTree tree;
DefaultMutableTreeNode mSelectNode; 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;
mSelectNode = treeNode;
Object userObject = treeNode.getUserObject();
//returnValue = ((treeNode.isLeaf()) && (userObject instanceof CheckBoxNode));
//returnValue = ((userObject instanceof CheckBoxNode)); returnValue = true;
}
}
}
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();
}
Object selectObj = mSelectNode.getUserObject();
String deviceName=( (CheckBoxNode) selectObj).text;
System.out.println("deviceName=" + deviceName);
if (! (selectObj instanceof CheckBoxNode))
return;
boolean flag = ( (CheckBoxNode) selectObj).isSelected();
if (mSelectNode.isLeaf() == false) {
for (int i = 0; i < mSelectNode.getChildCount(); i++) {
DefaultMutableTreeNode childNode = (DefaultMutableTreeNode)
mSelectNode.getChildAt(i);
Object userObject = childNode.getUserObject();
( (CheckBoxNode) userObject).setSelected(flag);
}
}
else
{
// ( (CheckBoxNode) selectObj).setSelected(flag);
for(int i =0;i<mSelectNode.getParent().getChildCount();i++)
{
DefaultMutableTreeNode childNode = (DefaultMutableTreeNode)
mSelectNode.getParent().getChildAt(i);
Object userObject2 = childNode.getUserObject();
String thisDeviceName = ( (CheckBoxNode) userObject2).text;
selectedStatementboolean=!selectedStatementboolean;
( (CheckBoxNode) userObject2).setselectedStatement(flag);
if(deviceName.equals(thisDeviceName)) {
( (CheckBoxNode) userObject2).setSelected(flag);
( (CheckBoxNode) userObject2).setselectedStatement(flag);
} //( (CheckBoxNode) userObject2).setSelected(flag);
}
}
System.out.println("deviceName " + deviceName);
System.out.println("((CheckBoxNode) " + ((CheckBoxNode) selectObj).isSelected());
}
};
if (editor instanceof JCheckBox) {
( (JCheckBox) editor).addItemListener(itemListener);
} return editor;
}
}class CheckBoxNode extends JCheckBox{
String text;
String parent;
boolean selectedStatement;
volatile boolean selected;
public CheckBoxNode(String text, boolean selected) {
this.text = text;
this.selected = selected;
}
public boolean getselectedStatement()
{
return selectedStatement;
} public void setselectedStatement(boolean newValue)
{
this.selectedStatement=newValue;
}
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 text;
} public void setCheckBoxParent(String szParent) {
parent = szParent;
} public String getCheckBoxParent() {
return parent;
}
}class NamedVector
extends Vector {
CheckBoxNode name; public NamedVector(CheckBoxNode name) {
this.name = name;
} public NamedVector(CheckBoxNode name, Vector elements) {
this.name = name;
for (int i = 0, n = elements.size(); i < n; i++) {
add(elements.get(i));
}
} public String toString() {
return "[" + name + "]";
}
}
但是我点子树,SELECTED了以后,输出一直是不正常的,实在是弄不懂了 WHY?
把dccDeviceTree中的device定义未成员变量
CheckBoxNodeEditor中的相应代码换为:
ItemListener itemListener = new ItemListener() {
public void itemStateChanged(ItemEvent itemEvent) {
if (stopCellEditing()) {
fireEditingStopped();
}
Object selectObj = mSelectNode.getUserObject();String deviceName=( (CheckBoxNode) selectObj).text;
//System.out.println("deviceName=" + deviceName);
if (! (selectObj instanceof CheckBoxNode))
return;
boolean flag = ( (CheckBoxNode) selectObj).isSelected();
if (mSelectNode.isLeaf() == false) {
for (int i = 0; i < mSelectNode.getChildCount(); i++) {
DefaultMutableTreeNode childNode = (DefaultMutableTreeNode)
mSelectNode.getChildAt(i);
Object userObject = childNode.getUserObject();
( (CheckBoxNode) userObject).setSelected(flag);
}
}
else
{
//System.out.println("leaf childcount = "+mSelectNode.getParent().getChildCount());
for(int i =0;i<mSelectNode.getParent().getChildCount();i++)
{
DefaultMutableTreeNode childNode = (DefaultMutableTreeNode)
mSelectNode.getParent().getChildAt(i);Object userObject2 = childNode.getUserObject();
String thisDeviceName = ( (CheckBoxNode) userObject2).text;
selectedStatementboolean=!selectedStatementboolean;
( (CheckBoxNode) userObject2).setselectedStatement(flag);
if (deviceName.equals(dccDeviceTree.device.get(i).toString())) {
((CheckBoxNode)dccDeviceTree.device.get(i)).setSelected(flag);
System.out.println("1->" + selectObj);
System.out.println("2->" +dccDeviceTree.device.get(i));
System.out.println(selectObj.equals(dccDeviceTree.device.get(i)));
}
if(deviceName.equals(thisDeviceName)) {
( (CheckBoxNode) userObject2).setSelected(flag);
( (CheckBoxNode) userObject2).setselectedStatement(flag);
}//( (CheckBoxNode) userObject2).setSelected(flag);
}}
//System.out.println("deviceName " + deviceName);
//System.out.println("((CheckBoxNode) " + ((CheckBoxNode) selectObj).isSelected());
}
};ps:在main中加上这句啊frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);!!!
哎 自己着么就没想到这点呢...~~感谢感谢 万分感谢 揭贴