0

我想将 Jtable 添加到 JComboBox 编辑器,所以当我选择 ComboBox 时,JTable 会显示出来。

我不能使用 table.removeActionListener() 和 table.addActionListener()。我们新功能

table.addAncestorListener(addAncestorListener listener) 和

table.removeAncestorListener(addAncestorListener 监听器)

到目前为止,她是我的代码,

public class CustomComboEditor implements ComboBoxEditor {
    private JTable table  ;
    public CustomComboEditor() {
        table = new JTable();
    }

    @Override
    public void addActionListener(ActionListener l) {

      // there is no addActionListener(l) for table

    }

    @Override
    public Component getEditorComponent() {
        return table ; 
    }

    @Override
    public Object getItem() {
        return table.getValueAt(table.getSelectedRow(), table.getSelectedColumn());
    }

    @Override
    public void removeActionListener(ActionListener l) {

        // there is no removeActionListener(l);for table
    }

    @Override
    public void selectAll() {
        table.selectAll();

    }

    @Override
    public void setItem(Object anObject) {
        return ; 

    }

}

她是一张图片,说明了我到底想要什么

组合框表格编辑器 http://im47.gulfup.com/ECk9HK.png

4

1 回答 1

1

虽然在技术上可以将 aJTable用作 a ComboBoxEditor,但结果可能很笨拙。相反,将所需的实例添加TableModel到组合中ComboBoxModel,并用于setModel()在相邻的 JTable. 总结如下,这里展示了一个完整的例子。

图片

DefaultComboBoxModel dcbm = new DefaultComboBoxModel();
private JComboBox combo = new JComboBox(dcvm);
…
for (int i = 0; i < N; i++) {
    …
    TableModel model = new YourTableModelModel(name);
    dcbm.addElement(model);
}
…
combo.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        TableModel model = (TableModel) combo.getSelectedItem();
        table.setModel(model);
    }
});
于 2014-11-29T16:37:57.607 回答