以下で提供されるコードをcamickr
参照として使用して、コンボボックスをセルエディターとして追加しました。
JTable (Java) の列に一意の JComboBox を追加する方法
私の場合を除いて、列内のすべてのセルで使用されるコンボボックスは 1 つだけ必要です。私が直面している問題は、コンボボックスが最後に選択されたアイテム (または現在選択されているアイテムかどうかはわかりません) を自動的に選択することです。異なる行が同じコンボボックスを共有しているため、セルの 1 つをクリックすると自動的に変更されます。最後に選択した項目まで。
簡単なデモンストレーションとして、上記のコードを変更して問題を示しました。コンボボックスで、選択したセルに設定されている項目と同じリスト上の項目を自動的に選択したい (セルを選択してから、そのセルの内容を自動的に変更するのではなく)
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);
}
}