jtable中的动态jcombobox项目

我试图在每一行中创建一个带有两个combobox的Jtable。 我检查了相关的教程,发现我可以在combobox中添加静态数据。 但是为什么我可以将动态数据加载到combobox中。

甚至,每当用户从该行中选择combobox1时,则基于此,combobox2将被更新。

在此处输入图像描述

有人可以帮我吗?

如果我从combobox中删除了removeAllItems() ,则combobox2将更新,但我无法添加新条目。

提前致谢。

Table有两列都呈现为JComboBox. 现在,Column-2项的选择取决于Column-1选择。

JComboBox Selction

 import java.awt.Component; import java.awt.EventQueue; import java.util.ArrayList; import java.util.List; import javax.swing.DefaultCellEditor; import javax.swing.DefaultComboBoxModel; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; public class ComboBoxExample { private void createUI() { JFrame frame = new JFrame(); Object[] columNames = {"Combo-1", "Combo-2"}; Object[][] data = {{"", ""}, {"", ""}, {"", ""}, {"", ""}}; JTable table = new JTable(data, columNames); table.getColumnModel().getColumn(0).setCellEditor(new CustomComboBoxEditor()); table.getColumnModel().getColumn(1).setCellEditor(new CustomComboBoxEditor()); frame.add(new JScrollPane(table)); frame.setTitle("Column -2 based on Column - 1 ComboBox Selection."); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setVisible(true); } public static void main(String[] args) { Runnable r = new Runnable() { @Override public void run() { new ComboBoxExample().createUI(); } }; EventQueue.invokeLater(r); } } class CustomComboBoxEditor extends DefaultCellEditor { // Declare a model that is used for adding the elements to the `ComboBox` private DefaultComboBoxModel model; private List obtainedList; public CustomComboBoxEditor() { super(new JComboBox()); this.model = (DefaultComboBoxModel)((JComboBox)getComponent()).getModel(); obtainedList = new ArrayList(); obtainedList.add("One"); obtainedList.add("Two"); obtainedList.add("Three"); obtainedList.add("Four"); obtainedList.add("Five"); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { if(column == 0) { model.removeAllElements(); for(int i = 0; i < obtainedList.size(); i++) { model.addElement(obtainedList.get(i)); } } else { model.removeAllElements(); String selectedItem = (String) table.getValueAt(row, 0); for(int i = 0; i < obtainedList.size(); i++) { if(!selectedItem.equals(obtainedList.get(i))) model.addElement(obtainedList.get(i)); } } // Close else return super.getTableCellEditorComponent(table, value, isSelected, row, column); } } 

尝试这样的事情,您可以在此示例中更改DATA,并重新绘制并执行单元格的渲染器:

  public void example(){ TableColumn tmpColum =table.getColumnModel().getColumn(1); String[] DATA = { "Data 1", "Data 2", "Data 3", "Data 4" }; JComboBox comboBox = new JComboBox(DATA); DefaultCellEditor defaultCellEditor=new DefaultCellEditor(comboBox); tmpColum.setCellEditor(defaultCellEditor); tmpColum.setCellRenderer(new CheckBoxCellRenderer(comboBox)); table.repaint(); } /** Custom class for adding elements in the JComboBox. */ class CheckBoxCellRenderer implements TableCellRenderer { JComboBox combo; public CheckBoxCellRenderer(JComboBox comboBox) { this.combo = new JComboBox(); for (int i=0; i 

在removeAllItems()调用之后,将combobox中的项添加为

  combobox.addItem("one"); combobox.addItem("two"); 
    Interesting Posts