基本的にメニューを開きましたが、アイテムの1つを選択するとJLabelが置き換えられたため、コンボボックスのみが表示されました。
それはあなたが期待するものであり、それDefaultCellEditor(JComboBox jcb)
が意図されている方法です:
import java.awt.BorderLayout;
import java.util.Properties;
import javax.swing.*;
import javax.swing.tree.TreeCellEditor;
public class TreeEditJComboBox {
public static void main(String args[]) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Properties props = System.getProperties();
JTree tree = new JTree(props);
JComboBox comboBox = new JComboBox(new String[]{"A", "B", "C"});
TreeCellEditor editor = new DefaultCellEditor(comboBox);
tree.setEditable(true);
tree.setCellEditor(editor);
JScrollPane scrollPane = new JScrollPane(tree);
frame.add(scrollPane, BorderLayout.CENTER);
frame.setSize(300, 150);
frame.setVisible(true);
}
}
}
独自のDefaultCellEditor
オーバーライドを作成してから、 andを保持するgetTableCellEditorComponent()
a を返すことができます。次のようなものです。JPanel
JLabel
JComboBox
class MyDefaultCellEditor extends DefaultCellEditor {
public MyDefaultCellEditor(JComboBox comboBox) {
super(comboBox);
}
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
//return custom coponent
return super.getTableCellEditorComponent(table, value, isSelected, row, column);
}
}
それから:
TreeCellEditor editor = new MyDefaultCellEditor(blockedAlternatives);
他のいくつかのメソッドもオーバーライドする必要がある場合があります。論理を示しただけ
参考文献: