[英]I already have a checkbox in a Java Swing TreeNode. But how do I make it checkable?
注意:我不是在問如何在 JTree 中放置一個復選框 - 以前,一個困惑的版主認為這就是我要問的。 我已經有樹中的復選框。 我在問什么類或方法控制復選框的可檢查性...
為了在 Tree 節點中獲得一個復選框,我讀到您必須制作一個復選框渲染器,所以我制作了一個:
class CheckboxCellRenderer implements TreeCellRenderer {
final static Logger logger = LoggerFactory.getLogger(CheckboxCellRenderer.class);
JLabel firstNameLabel = new JLabel(" ");
JPanel renderer = new JPanel();
JCheckBox checkbox;
DefaultTreeCellRenderer defaultRenderer = new DefaultTreeCellRenderer();
public CheckboxCellRenderer() {
super();
checkbox = new JCheckBox(firstNameLabel.getText(), false);
renderer.add(checkbox);
renderer.add(firstNameLabel);
}
public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
boolean expanded, boolean leaf, int row, boolean hasFocus) {
Component returnValue = null;
firstNameLabel.setText(value.toString());
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
renderer.setEnabled(tree.isEnabled());
if(((DefaultMutableTreeNode) value).getLevel()==1){
returnValue = renderer;
}
}
if (returnValue == null) {
returnValue = defaultRenderer.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
}
return returnValue;
}
}
這會在樹節點中創建復選框。 但由於某種原因,這使得復選框不可選中,當我單擊它時沒有任何反應。 為什么在渲染器中創建復選框會“破壞”復選框? 如何使復選框可勾選(即當我單擊復選框時它被選中,而當我再次單擊它時它被取消選中)?
為了使復選框“可檢查”,看起來您需要一個編輯器類。 這可以通過注釋掉“tree.setCellEditor(new CheckBoxNodeEditor(tree));”這一行來證明。 在 Abra 發布的“CheckBox 節點樹示例”中,這使得示例“不可檢查”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.