Hi ist es möglich, mit dem JTree einen Baum zu erzeugen, wo am besten hinter jedem tag eine Checkbox sich befindet? Oder darf ich mir da selber was bauen?
package tree;
/*
* TreeWithCb.java
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.tree.*;
import java.util.*;
public class TreeWithCb {
public static void main(String[] arg) {
JFrame windowTree = new WindowTree();
windowTree.setVisible(true);
}
}
class WindowTree extends JFrame {
WindowTree() {
super("Tree with checkboxes");
setSize(800, 600);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTree tree;
DefaultMutableTreeNode parentNode;
DefaultMutableTreeNode childNode;
DefaultTreeCellRenderer dtcr = new DefaultTreeCellRenderer();
ComponentRenderer componentRenderer = new ComponentRenderer();
ComponentEditor componentEditor = new ComponentEditor();
JCheckBox jcb = new JCheckBox();
String[] cbList = {"Hello", "my", "name", "is", "André"};
JScrollPane jsp = new JScrollPane();
parentNode = new DefaultMutableTreeNode(new JCheckBox("I present myself"));
for (int i = 0; i < cbList.length; i++) {
jcb = new JCheckBox(cbList[i]);
childNode = new DefaultMutableTreeNode(jcb, true);
parentNode.add(childNode);
}
tree = new JTree(parentNode);
tree.setCellRenderer(componentRenderer);
tree.setCellEditor(componentEditor);
tree.setEditable(true);
getContentPane().add(tree);
}
}
class ComponentRenderer implements TreeCellRenderer {
@Override
public Component getTreeCellRendererComponent(JTree tree, Object obj, boolean selected, boolean expanded, boolean leaf, int row, boolean hasFocus) {
DefaultMutableTreeNode dmtcr = (DefaultMutableTreeNode) obj;
JCheckBox toto = (JCheckBox) dmtcr.getUserObject();
return toto;
}
}
class ComponentEditor implements TreeCellEditor {
@Override
public void addCellEditorListener(CellEditorListener l) {
}
@Override
public void cancelCellEditing() {
}
@Override
public Object getCellEditorValue() {
return this;
}
@Override
public boolean isCellEditable(EventObject evt) {
if (evt instanceof MouseEvent) {
MouseEvent mevt = (MouseEvent) evt;
if (mevt.getClickCount() == 1) {
return true;
}
}
return false;
}
@Override
public void removeCellEditorListener(CellEditorListener l) {
}
@Override
public boolean shouldSelectCell(EventObject anEvent) {
return true;
}
@Override
public boolean stopCellEditing() {
return false;
}
@Override
public Component getTreeCellEditorComponent(JTree tree, Object obj, boolean isSelected, boolean expanded, boolean leaf, int row) {
DefaultMutableTreeNode dmtn = (DefaultMutableTreeNode) obj;
JCheckBox tata = (JCheckBox) dmtn.getUserObject();
tata.setEnabled(true);
return tata;
}
}
Enumeration enum = children.elements();
Das Beispiel funktioniert genau so !!!Titanpharao hat gesagt.:..Wenn man aber z.b. nur das Root Panel angeklickt hat
heißt es, alles was da drin ist soll auch noch mit..