我已經加入的組合框爲使用由下面camickr
提供作爲參考代碼的小區編輯:JComboBox的多個表格單元格之間共享自動選擇當前選擇的項目
How to add unique JComboBoxes to a column in a 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);
}
}
1)單元編輯器可以設置每列,它將被重新用於整個列。 2)你有一個組合框,不一定包含單元格的值 - > TableCellEditor不知道如何處理這種情況。 –
我想我必須附加一個動作偵聽器到組合框來確定選擇哪個項目,但我不確定要觸發哪個事件。 – MxyL