Mega Code Archive

 
Categories / Java Tutorial / Swing
 

CheckBox Tree node

import java.awt.Component; import javax.swing.DefaultCellEditor; import javax.swing.JCheckBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTree; import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.DefaultTreeCellRenderer; import javax.swing.tree.MutableTreeNode; import javax.swing.tree.TreePath; class TrueFalseTreeNodeData {   protected final String value;   protected boolean booleanValue;   public TrueFalseTreeNodeData(String quest) {     value = quest;   }   public String getQuestion() {     return value;   }   public boolean getAnswer() {     return booleanValue;   }   public void setAnswer(boolean ans) {     booleanValue = ans;   }   public String toString() {     return value + " = " + booleanValue;   } } public class TreeTest extends JFrame {   protected final static String[] questions = { "A","B","C" };   public static void main(String[] args) {     TreeTest tt = new TreeTest();     tt.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     tt.setSize(500, 200);     tt.setVisible(true);   }   public TreeTest() {     super();     JTree tree = new JTree(getRootNode()) {       public boolean isPathEditable(TreePath path) {         Object comp = path.getLastPathComponent();         if (comp instanceof DefaultMutableTreeNode) {           DefaultMutableTreeNode node = (DefaultMutableTreeNode) comp;           Object userObject = node.getUserObject();           if (userObject instanceof TrueFalseTreeNodeData) {             return true;           }         }         return false;       }     };     QuestionCellRenderer renderer = new QuestionCellRenderer();     tree.setCellRenderer(renderer);     QuestionCellEditor editor = new QuestionCellEditor();     tree.setCellEditor(editor);     tree.setEditable(true);     JScrollPane jsp = new JScrollPane(tree);     getContentPane().add(jsp);   }   protected MutableTreeNode getRootNode() {     DefaultMutableTreeNode root, child;     TrueFalseTreeNodeData question;     root = new DefaultMutableTreeNode("Root");     for (int i = 0; i < questions.length; i++) {       question = new TrueFalseTreeNodeData(questions[i]);       child = new DefaultMutableTreeNode(question);       root.add(child);     }     return root;   } } class QuestionCellRenderer extends DefaultTreeCellRenderer {   protected JCheckBox checkBoxRenderer = new JCheckBox();   public Component getTreeCellRendererComponent(JTree tree, Object value,       boolean selected, boolean expanded, boolean leaf, int row,       boolean hasFocus) {     if (value instanceof DefaultMutableTreeNode) {       DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;       Object userObject = node.getUserObject();       if (userObject instanceof TrueFalseTreeNodeData) {         TrueFalseTreeNodeData question = (TrueFalseTreeNodeData) userObject;         prepareQuestionRenderer(question, selected);         return checkBoxRenderer;       }     }     return super.getTreeCellRendererComponent(tree, value, selected, expanded,         leaf, row, hasFocus);   }   protected void prepareQuestionRenderer(TrueFalseTreeNodeData tfq, boolean selected) {     checkBoxRenderer.setText(tfq.getQuestion());     checkBoxRenderer.setSelected(tfq.getAnswer());     if (selected) {       checkBoxRenderer.setForeground(getTextSelectionColor());       checkBoxRenderer.setBackground(getBackgroundSelectionColor());     } else {       checkBoxRenderer.setForeground(getTextNonSelectionColor());       checkBoxRenderer.setBackground(getBackgroundNonSelectionColor());     }   } } class QuestionCellEditor extends DefaultCellEditor {   protected TrueFalseTreeNodeData nodeData;   public QuestionCellEditor() {     super(new JCheckBox());   }   public Component getTreeCellEditorComponent(JTree tree, Object value,       boolean selected, boolean expanded, boolean leaf, int row) {     JCheckBox editor = null;     nodeData = getQuestionFromValue(value);     if (nodeData != null) {       editor = (JCheckBox) (super.getComponent());       editor.setText(nodeData.getQuestion());       editor.setSelected(nodeData.getAnswer());     }     return editor;   }   public static TrueFalseTreeNodeData getQuestionFromValue(Object value) {     if (value instanceof DefaultMutableTreeNode) {       DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;       Object userObject = node.getUserObject();       if (userObject instanceof TrueFalseTreeNodeData) {         return (TrueFalseTreeNodeData) userObject;       }     }     return null;   }   public Object getCellEditorValue() {     JCheckBox editor = (JCheckBox) (super.getComponent());     nodeData.setAnswer(editor.isSelected());     return nodeData;   } }