简体   繁体   English

使用Java为Jtable的每一行添加列表框

[英]To add listbox for every row of a Jtable using java

I want to add listbox for every row of a Jtable. 我想为Jtable的每一行添加列表框。 and every listbox should be populated with different values that is retrieved from a file or a database. 并且每个列表框都应填充从文件或数据库中检索到的不同值。 Here is the code for the same. 这是相同的代码。

combo=new JComboBox(model1);
FileInputStream fstream= new FileInputStream("scbdata.txt");
DataInputStream in=new DataInputStream(fstream);
BufferedReader br=new BufferedReader(new InputStreamReader(in));
str=br.readLine();
s = str.split(",");
for(int i=0;i<15;i++)   
model1.addElement(s[i]);
TableColumn col=m_table.getColumnModel().getColumn(3);
col.setCellEditor(new DefaultCellEditor(combo));`   

When I am using the above code the same combo box is being added to the entire rows of a column but i want to add combo box with different content in each row of a particular column. 当我使用上面的代码时,同一组合框被添加到一列的整个行中,但是我想在特定列的每一行中添加具有不同内容的组合框。 Is there any way out to add a ComboBox or something in a single cell? 有没有办法在单个单元格中添加ComboBox或其他内容?

Check this 检查一下

public class JTableWithComboBox {

    private static class ComboBoxCellRenderer extends JComboBox implements TableCellRenderer {

        public ComboBoxCellRenderer(Object[] items) {
            super(items);
        }

        @Override
        public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
            setSelectedItem(value);
            return this;
        }
    }

    protected void initUI() {
        JFrame frame = new JFrame("test");
        frame.add(getTable());
        frame.pack();
        frame.setVisible(true);
    }

    private Component getTable() {
        Vector<Vector<String>> data = new Vector<Vector<String>>();
        for (int i = 0; i < 1; i++) {
            Vector<String> row = new Vector<String>();
            for (int j = 0; j < 1; j++) {
                row.add("some value");
            }
            data.add(row);
        }
        Vector<String> columns = new Vector<String>();
        columns.add("Column 1");
        DefaultTableModel model = new DefaultTableModel(data, columns);
        JTable table = new JTable(model);
        table.setRowHeight(20);
        int i = 0;
        Enumeration<TableColumn> c = table.getColumnModel().getColumns();
        String[] items = {"Item1", "Item2", "Item3"};
        JComboBox combo = new JComboBox(items);
        while (c.hasMoreElements()) {
            TableColumn column = c.nextElement();
            column.setCellRenderer(new ComboBoxCellRenderer(items));
            column.setCellEditor(new DefaultCellEditor(combo));
            combo.addItemListener(new ItemListener() {
                @Override
                public void itemStateChanged(ItemEvent e) {
                    if (e.getStateChange() == ItemEvent.SELECTED) {
                        System.out.println(e.getItem() + " selected");
                    }
                }
            });
            i++;
        }
        JScrollPane scroll = new JScrollPane(table);
        scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
        return scroll;
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new JTableWithComboBox().initUI();
            }
        });
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM