2013-05-05 175 views
1

這種類型的帖子之前已經處理過,但我遇到的問題是基於我的代碼的結構。將JCombo列添加到JTable

我只是簡單地試圖添加一個JComboBox到我最後一列中的所有行。代碼如下。

//Return Person objects from a method 
ArrayList<Person> people = getPersonList(); 

String[] columnNames {"Name", "Age", "English Speaker?" }; 

DefaultTableModel model = new DefaultTableModel(); 
model.setColumnIdentifiers(columnNames); 

JTable table = new JTable(model); 

//Create JComboBox for last column (English Speaker?)      
JComboBox<Integer> englishCombo = new JComboBox<>(); 

int count = 1; 

//For loop to add each Person to there rows 
//Also add a boolean value to determine check box 
for(Person p: people) 
{ 
    boolean english =false; 

    if(p.isEnglishSpeaker() == true) 
    { 
     english = true; 
    } 
    else 
    { 
     english = false; 
    } 
    questionCombo.addItem(count); 

    model.addRow(new Object[]{p.getName(), p.getAge(), english); 
} 

//Get 3rd column (English Speaker) 
TableColumn englishColumn = table.getColumnModel().getColumn(2); 
//Add JComboBox to English Speaker 
englishColumn.setCellEditor(new DefaultCellEditor(englishCombo)); 

當我運行這段代碼時,它只在第三列中顯示爲真,而不是在JcomboBox中? 任何人都可以找出問題嗎? 非常感謝

+0

'布爾英語= FALSE; if(p.isEnglishSpeaker()== true) { english = true; } else { english = false; '也可以寫成:'boolean english = p.isEnglishSpeaker();'。或者甚至更簡單,放下之前寫的所有東西,只需調用:'model.addRow(new Object [] {p.getName(),p.getAge(),p.isEnglishSpeaker());' – 2013-05-05 10:27:41

+0

查看本[回答]( http://stackoverflow.com/questions/11226926/java-jtable-with-jcombobox/11227034#11227034)。 – 2013-05-05 10:35:40

+0

感謝您的回覆。我只是改變了更簡單的方式(不知道我是如何錯過的)。但它仍然只返回false,而不是實際的JComboBox?謝謝 – 2013-05-05 10:36:07

回答

2

您已經指定了一個自定義editor;現在您需要解決renderer。我看到兩種可能性:

  1. 使用JComboBox<String>與所需truefalse值,如圖所示here

    image1

  2. 使用默認渲染器和編輯器,JCheckBox,對值類型爲Boolean.class,如圖herehere

image2

+0

非常感謝你的回答。這是我的錯誤。我的意思是我需要一個JCheckBox,而不是一個JComboBox。但是當添加一個JCheckBox時,它的方法完全相同,對吧? – 2013-05-06 10:47:05

+0

'JCheckBox'更容易,因爲這是'Boolean.class'類型'TableModel'值的默認值。上面第二點的第二個例子顯示瞭如何重寫'getColumnClass()'。 – trashgod 2013-05-06 11:18:57