2013-05-05 217 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