我尽量让JTree的定制TreeRendererSwing JTree如何自定义渲染从自定义编辑器获取价值?
,并用自定义编辑器
public class TextCellEdit extends AbstractCellEditor implements TreeCellEditor {
至极getTreeCellEditorComponent回报面板getTreeCellEditorComponent但JComboBox中至极项目从数据库填充。 渲染和编辑器很好,我可以点击字段和comboBox显示来自数据库的值。
public Component getTreeCellEditorComponent(JTree tree, Object value,
boolean isSelected, boolean expanded, boolean leaf, int row) {
if (value != null && value instanceof DefaultMutableTreeNode) {
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
if (userObject instanceof FieldObj) {
FieldObj my = (FieldObj) userObject;
box.removeAllItems();
label.setText(my.FieldName);
populatebox(my.FieldName);
box.addItem(my.valueList);
panel.add(label);
panel.add(box);
} else {
box.addItem("Uknown object type");
}
return panel;
}
}
public Object getCellEditorValue() {
System.out.println("getCellEditoValue returns :" + box.getSelectedItem());
return box.getSelectedItem();
}
但它不保存在渲染textarea的 我的意思是渲染我有面板: 的JLabel(字段名) 的JTextArea(fieldValue方法)
当我的JTextArea点击我有我的编辑至极有 的JLabel(字段名) 的JComboBox(FieldValues至极我已经从数据库填充)
,但是当我选择什么形式编辑的ComboBox它不保存在渲染文本区域 所以,问题是如何事情应该工作? 组件如何从编辑组件获取值?
这是不完全正确getCellEditorValue()被invoken,但我找不到在哪里渲染使用它。 (我已经实现了这个方法,在我看来,它需要验证或其他需要修改值的东西) 似乎Render使用了一些Listener,但现在我找不到它了。 – user1722669
Renderer不使用它。它只会改变你的对象。渲染器再次读取对象并捕捉更改。编辑:'getTreeCellRendererComponent'中的渲染器总是得到更改的对象并显示它。 – alex2410
感谢您的帮助。 我编辑我的问题(添加getCellEditorValue实现)你可以告诉它有什么不对吗 它尝试返回box.getSelectedItem()。toString()为了大小写。 首先,我认为Render获得价值,但可以设置它,因为我返回面板,我尝试从Render返回TextArea,结果相同。 另外我找不到getCellEditorValue()的一个很好的解释。 – user1722669