カスタム TreeRenderer で JTree を作成しようとしています
public class TextCellRender implements TreeCellRenderer {
JPanel panel;
JTextArea text;
JLabel label;
LayoutManager Layout;
public TextCellRender() {
text = new JTextArea();
text.setWrapStyleWord(true);
text.setLineWrap(true);
text.setSize(360, text.getPreferredSize().height);
label = new JLabel();
panel = new JPanel();
panel.add(label);
panel.add(text);
}
@Override
public Component getTreeCellRendererComponent(JTree tree, Object value,
boolean selected, boolean expanded, boolean leaf,
int row, boolean hasFocus) {
Component returnValue = null;
if ((value != null) && (value instanceof DefaultMutableTreeNode)) {
Object userObject = ((DefaultMutableTreeNode) value).getUserObject();
if ((userObject instanceof FieldObj)) {
FieldObj my = (FieldObj) userObject;
String fieldText = "";
text.setText(my.valueList);
label.setText(my.FieldName);
}
return panel;
}
return returnValue;
}
}
そしてカスタムエディターで
public class TextCellEdit extends AbstractCellEditor implements TreeCellEditor {
どの getTreeCellEditorComponent がパネルを getTreeCellEditorComponent として返しますが、Items が db から取り込まれる JComboBox を使用します。Render と Editor はうまく機能します。フィールドをクリックすると、db からの値を含むコンボボックスが表示されます。
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();
}
しかし、Render textArea には保存されません Render には次のようなパネルがあります:
JLabel (FieldName)
JTextArea (FieldValue)
JTextAreaをクリックすると、次のエディタがあります:
JLabel(FieldName)
JComboBox(DBから入力したFieldValues)
しかし、Edit ComboBox から何かを選択すると、Render TextArea に保存されません。問題は、これがどのように機能するかです。
どのようにレンダーコンポーネントが編集コンポーネントから値を取得しますか?