2014-07-01 32 views
0

對於我的項目,我只想顯示一個JTable對話框。在這一點上,我想根據行索引顯示JCombobox與可用的工作人員。我試了下面的編碼,如何在每行JCombo中顯示不同的值

for(int i=0;i<n;i++) 
{ 
Object obj[] = new Object[4]; 
obj[0]=2, 
obj[1]=3; 
obj[2]=""; //Here combo appear. 
obj[3]=3; 
JComboBox aa = new JComboBox(); 
for(int j=0;j<m;j++) 
{ 
aa.addItem(rs.getString(1)); 
aa.addItem(rs.getString(2)); 
} 
table.getcolumnModel.getcolumn(2).setcellEditor(new DefaultCellEditor(aa)); 
model.addRow(obj); 
} 

如果我使用這個輸出生成。但是最後一行組合值出現在所有先前的行組合中。那些不同的價值觀並不在於此。它完全一樣。但所有其他文本字段都正確顯示。我應該在這裏做什麼。感謝您......

注:這裏

aa.addItem(rs.getString(1)); 
aa.addItem(rs.getString(2)); 

僅僅是例子。實際上它會根據id返回許多值。

回答

1

您嘗試將編輯器設置爲每行,但這是錯誤的,編輯器可以設置爲整列。閱讀Concepts: Editors and Renderers。而不是在getTableCellEditorComponent()方法TableCellEditor實施您的邏輯。

按每行在不同的值簡單的例子:

import java.awt.Component; 
import java.util.Arrays; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import javax.swing.DefaultCellEditor; 
import javax.swing.DefaultComboBoxModel; 
import javax.swing.JComboBox; 
import javax.swing.JFrame; 
import javax.swing.JScrollPane; 
import javax.swing.JTable; 
import javax.swing.table.TableCellEditor; 

public class TestFrame extends JFrame { 

    private DefaultComboBoxModel<String> model; 
    private Map<String, List<String>> keyVal; 

    public TestFrame() { 
     init(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     pack(); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    private void init() { 
     keyVal = new HashMap<>(); 
     keyVal.put("1", Arrays.asList(new String[]{"a","b"})); 
     keyVal.put("0", Arrays.asList(new String[]{"c","d"})); 
     keyVal.put("2", Arrays.asList(new String[]{"e","f","g"})); 
     JTable t = new JTable(3,3); 
     t.getColumnModel().getColumn(0).setCellEditor(getEditor()); 
     add(new JScrollPane(t)); 
    } 

    private TableCellEditor getEditor() { 

     return new DefaultCellEditor(new JComboBox<String>(model = new DefaultComboBoxModel<String>())){ 
      @Override 
      public Component getTableCellEditorComponent(JTable table,Object value, boolean isSelected, int row, int column) { 
       model.removeAllElements(); 
       if(keyVal.containsKey(row+"")){ 
        List<String> list = keyVal.get(row+""); 
        for(String s : list) 
         model.addElement(s); 
       } 
       return super.getTableCellEditorComponent(table, value, isSelected, row, column); 
      } 
     }; 
    } 

    public static void main(String args[]) { 
     new TestFrame(); 
    } 

} 
+0

感謝@ alex2410 ...我的問題通過使用此解決。 – Billu

相關問題