2014-07-01 3 views
0

프로젝트의 경우 JTable을 사용하여 대화 상자를 표시하기 만하면됩니다. 그것에 나는 행 인덱스를 기반으로 사용 가능한 직원과 JCombobox를 보여주고 싶습니다. 다음 출력을 사용하면각 행의 JCombo에서 differnt 값을 표시하는 방법

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

관련 문제