gpt4 book ai didi

java - 如何在JCombobox中每行显示不同的值

转载 作者:行者123 更新时间:2023-12-01 12:47:55 25 4
gpt4 key购买 nike

对于我的项目,我只想用 JTable 显示一个对话框。对此,我想根据行索引显示一个带有可用人员的 JCombobox。我尝试了以下编码,

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

如果我使用生成的输出。但最后一行组合值存在于所有先前行组合中。那些不同的值(value)观并不在其中。完全一样。但所有其他文本字段均正确显示。我应该在这里做什么。谢谢你...

注意:这里

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

只是举例。实际上它会根据id返回很多值。

最佳答案

您尝试将编辑器设置为每一行,但这是错误的,编辑器可以设置为整列。阅读 Concepts: Editors and Renderers 。而不是在 TableCellEditorgetTableCellEditorComponent() 方法中实现您的逻辑。

每行具有不同值的简单示例:

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

}

关于java - 如何在JCombobox中每行显示不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24508684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com