Java jtable中的动态jcombobox项

Java jtable中的动态jcombobox项,java,swing,jtable,dynamic-data,jcombobox,Java,Swing,Jtable,Dynamic Data,Jcombobox,我试图创建一个每行有两个组合框的Jtable。我已经查阅了关于这方面的教程,发现我可以在combobox中添加静态数据。但是为什么我可以将动态数据加载到组合框中呢 甚至,每当用户从行中选择组合框1时,基于此,组合框2将被更新 有人能帮我吗 如果我从组合框中删除了removeAllItems(),则组合框2将更新,但我无法添加新条目 提前感谢。表格有两列,两列都呈现为JComboBox。现在,第2列项目的选择取决于第1列的选择 import java.awt.Component; import

我试图创建一个每行有两个组合框的Jtable。我已经查阅了关于这方面的教程,发现我可以在combobox中添加静态数据。但是为什么我可以将动态数据加载到组合框中呢

甚至,每当用户从行中选择组合框1时,基于此,组合框2将被更新

有人能帮我吗

如果我从组合框中删除了
removeAllItems()
,则组合框2将更新,但我无法添加新条目


提前感谢。

表格有两列,两列都呈现为
JComboBox。
现在,第2列项目的选择取决于第1列的选择

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<String> obtainedList;

    public CustomComboBoxEditor() {
        super(new JComboBox());
        this.model = (DefaultComboBoxModel)((JComboBox)getComponent()).getModel();
        obtainedList = new ArrayList<String>();

        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);
     }
    }

导入java.awt.Component;
导入java.awt.EventQueue;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.DefaultCellEditor;
导入javax.swing.DefaultComboxModel;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
公共类组合框示例{
私有void createUI(){
JFrame=新JFrame();
Object[]columNames={“Combo-1”、“Combo-2”};
对象[][]数据={{,},{,},{,{,},{,},{,},{,};
JTable table=新的JTable(数据、列名称);
table.getColumnModel().getColumn(0.setCellEditor(新的CustomComboboxBoxeditor());
table.getColumnModel().getColumn(1.setCellEditor(新的CustomComboboxBoxeditor());
frame.add(新的JScrollPane(表));
setTitle(“基于第1列组合框选择的第2列”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
Runnable r=新的Runnable(){
@凌驾
公开募捐{
新建ComboBoxExample().createUI();
}
};
调用器(r);
}
}
类CustomComboBoxEditor扩展了DefaultCellEditor{
//声明用于将元素添加到“ComboBox”的模型`
私有模型;
获取的私有列表列表;
公共CustomComboxBoxeditor(){
super(新JComboBox());
this.model=(DefaultComboxModel)((JComboBox)getComponent()).getModel();
AcquiredList=新的ArrayList();
获取列表。添加(“一”);
获取列表。添加(“两个”);
获取列表。添加(“三”);
获取列表。添加(“四”);
获取列表。添加(“五”);
}
@凌驾
公共组件getTableCellEditorComponent(JTable表、对象值、布尔isSelected、int行、int列){
如果(列==0){
model.removeAllElements();
对于(int i=0;i
表格有两列,两列都呈现为
JComboBox。
现在,第2列项目的选择取决于第1列的选择

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<String> obtainedList;

    public CustomComboBoxEditor() {
        super(new JComboBox());
        this.model = (DefaultComboBoxModel)((JComboBox)getComponent()).getModel();
        obtainedList = new ArrayList<String>();

        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);
     }
    }

导入java.awt.Component;
导入java.awt.EventQueue;
导入java.util.ArrayList;
导入java.util.List;
导入javax.swing.DefaultCellEditor;
导入javax.swing.DefaultComboxModel;
导入javax.swing.JComboBox;
导入javax.swing.JFrame;
导入javax.swing.JScrollPane;
导入javax.swing.JTable;
公共类组合框示例{
私有void createUI(){
JFrame=新JFrame();
Object[]columNames={“Combo-1”、“Combo-2”};
对象[][]数据={{,},{,},{,{,},{,},{,},{,};
JTable table=新的JTable(数据、列名称);
table.getColumnModel().getColumn(0.setCellEditor(新的CustomComboboxBoxeditor());
table.getColumnModel().getColumn(1.setCellEditor(新的CustomComboboxBoxeditor());
frame.add(新的JScrollPane(表));
setTitle(“基于第1列组合框选择的第2列”);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
公共静态void main(字符串[]args){
Runnable r=新的Runnable(){
@凌驾
公开募捐{
新建ComboBoxExample().createUI();
}
};
调用器(r);
}
}
类CustomComboBoxEditor扩展了DefaultCellEditor{
//声明用于将元素添加到“ComboBox”的模型`
私有模型;
获取的私有列表列表;
公共CustomComboxBoxeditor(){
super(新JComboBox());
this.model=(DefaultComboxModel)((JComboBox)getComponent()).getModel();
AcquiredList=新的ArrayList();
获取列表。添加(“一”);
获取列表。添加(“两个”);
获取列表。添加(“三”);
获取列表。添加(“四”);
获取列表。添加(“五”);
}
@凌驾
公共组件getTableCellEditorComponent(JTable表、对象值、布尔isSelected、int行、int列){
如果(列==0){
model.removeAllElements();
对于(int i=0;i  combobox.addItem("one");
  combobox.addItem("two");