camickr
我使用下面提供的代码作为参考添加了一个组合框作为单元格编辑器:
如何将唯一的 JComboBoxes 添加到 JTable 中的列(Java)
除了在我的情况下,我只需要一个组合框供一列中的所有单元格使用。我遇到的问题是组合框会自动选择最后一个选定的项目(或当前选定的项目,不确定),并且由于不同的行共享相同的组合框,如果您单击其中一个单元格,它将自动更改到最后选择的项目。
作为一个快速演示,我只是修改了上面的代码来显示问题。我希望组合框自动选择列表中的项目,该项目等于所选单元格中设置的项目(而不是选择一个单元格,然后自动更改该单元格的内容)
import java.awt.*;
import java.awt.event.*;
import java.util.List;
import java.util.ArrayList;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.table.*;
public class Test extends JFrame
{
List<TableCellEditor> editors = new ArrayList<TableCellEditor>(3);
public Test()
{
// Create the editors to be used for each row
String[] items1 = { "Red", "Blue", "Green" };
JComboBox comboBox1 = new JComboBox( items1 );
DefaultCellEditor dce1 = new DefaultCellEditor( comboBox1 );
editors.add( dce1 );
// Create the table with default data
Object[][] data =
{
{"Color", "Red"},
{"Shape", "Square"},
{"Fruit", "Banana"},
{"Plain", "Text"}
};
String[] columnNames = {"Type","Value"};
DefaultTableModel model = new DefaultTableModel(data, columnNames);
JTable table = new JTable(model)
{
// Determine editor to be used by row
public TableCellEditor getCellEditor(int row, int column)
{
int modelColumn = convertColumnIndexToModel( column );
if (modelColumn == 1 && row < 3)
return editors.get(0);
else
return super.getCellEditor(row, column);
}
};
JScrollPane scrollPane = new JScrollPane( table );
getContentPane().add( scrollPane );
}
public static void main(String[] args)
{
Test frame = new Test();
frame.setDefaultCloseOperation( EXIT_ON_CLOSE );
frame.pack();
frame.setVisible(true);
}
}