gpt4 book ai didi

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

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

我想为 Jtable 的每一行添加列表框。每个列表框都应该填充从文件或数据库检索的不同值。这是相同的代码。

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

当我使用上面的代码时,相同的组合框被添加到列的整行中,但我想在特定列的每一行中添加具有不同内容的组合框。有什么方法可以在单个单元格中添加组合框或其他内容吗?

最佳答案

检查这个

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

关于java - 使用 java 为 Jtable 的每一行添加列表框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13645431/

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