2013-06-27 86 views
0

我已經加入的組合框爲使用由下面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); 
    } 
} 
+0

1)單元編輯器可以設置每列,它將被重新用於整個列。 2)你有一個組合框,不一定包含單元格的值 - > TableCellEditor不知道如何處理這種情況。 –

+0

我想我必須附加一個動作偵聽器到組合框來確定選擇哪個項目,但我不確定要觸發哪個事件。 – MxyL

回答

2

上自動選擇一個項目默認情況下,組合框的第一項被選中,在你的例子中是「紅色」。

編輯單元格時,在組合框編輯器中選擇TableModel中的值。由於表格中的數據與組合框中的任何條目都不匹配,因此選擇不會更改,因此「編輯器」中的值顯示爲「紅色」。

當您從編輯器中進行選擇後,該值將保存在模型中,並且在下次編輯單元格時將正確顯示。

解決您的問題的方法是確保TableModel在創建時包含有效數據。只有這樣才能選擇組合框中的正確項目。

我想我會要一個動作偵聽器附加到組合框,以確定哪些項目選擇

不,你不上具有ComboBox監聽器,當它被用作編輯播放。 comboBox編輯器自動爲您選擇項目。

+0

+1,@Keikoku [也許會幫助你](http://stackoverflow.com/a/12298264/714968) – mKorbel

+0

我發現了這個問題。組合框中填充了來自枚舉器的數據,但表模型將值顯示爲字符串。當我將它們轉換爲適當的枚舉類型時,組合框會正確找到這些項目。 – MxyL