简体   繁体   English

如何在每行的JCombo中显示不同的值

[英]How to display differnt values in JCombo in each row

For my project i just want to show a dialogue box with JTable. 对于我的项目,我只想显示一个带有JTable的对话框。 On that i want to show a JCombobox with available staff based on row index. 在此,我想显示一个JCombobox,其中包含基于行索引的可用人员。 I tried the following coding, 我尝试了以下编码,

for(int i=0;i<n;i++)
{
Object obj[] = new Object[4];
obj[0]=2,
obj[1]=3;
obj[2]="";  //Here combo appear.
obj[3]=3;
JComboBox aa = new JComboBox();
for(int j=0;j<m;j++)
{
aa.addItem(rs.getString(1));
aa.addItem(rs.getString(2));
}
table.getcolumnModel.getcolumn(2).setcellEditor(new DefaultCellEditor(aa));
model.addRow(obj);
}

if i use this output generated. 如果我使用生成的此输出。 But last rows combo value is present in all previous rows combo. 但是最后的行组合值出现在所有先前的行组合中。 Those different values are not in that. 这些不同的值不在那。 its totally same. 完全一样 But all other text fields are correctly displayed. 但是所有其他文本字段都正确显示。 What should i do here. 我应该在这里做什么。 thanking you... 感谢您...

Note: Here 注意:这里

 aa.addItem(rs.getString(1));
 aa.addItem(rs.getString(2));

is just for example. 仅举例来说。 Actually it will return many number of values based on id. 实际上,它将基于id返回许多数量的值。

You try to set editor to each row, but it's wrong, editor can be set to whole column. 您尝试将编辑器设置为每一行,但这是错误的,可以将编辑器设置为整列。 Read Concepts: Editors and Renderers . 阅读概念:编辑器和渲染器 Instead of that implement your logic in getTableCellEditorComponent() method of TableCellEditor . 而不是在TableCellEditor getTableCellEditorComponent()方法中实现您的逻辑。

Simple example with different values for each row: 每个行具有不同值的简单示例:

import java.awt.Component;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.swing.DefaultCellEditor;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.TableCellEditor;

public class TestFrame extends JFrame {

    private DefaultComboBoxModel<String> model;
    private Map<String, List<String>> keyVal;

    public TestFrame() {
        init();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    private void init() {
        keyVal = new HashMap<>();
        keyVal.put("1", Arrays.asList(new String[]{"a","b"}));
        keyVal.put("0", Arrays.asList(new String[]{"c","d"}));
        keyVal.put("2", Arrays.asList(new String[]{"e","f","g"}));
        JTable t = new JTable(3,3);
        t.getColumnModel().getColumn(0).setCellEditor(getEditor());
        add(new JScrollPane(t));
    }

    private TableCellEditor getEditor() {

        return new DefaultCellEditor(new JComboBox<String>(model = new DefaultComboBoxModel<String>())){
            @Override
            public Component getTableCellEditorComponent(JTable table,Object value, boolean isSelected, int row, int column) {
                model.removeAllElements();
                if(keyVal.containsKey(row+"")){
                    List<String> list = keyVal.get(row+"");
                    for(String s : list)
                        model.addElement(s);
                }
                return super.getTableCellEditorComponent(table, value, isSelected, row, column);
            }
        };
    }

    public static void main(String args[]) {
        new TestFrame();
    }

}

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

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