2011-10-26 2 views
0

javax.swing.JComboBox를 org.jdesktop.swingx.JXTable 셀에 넣는 데 문제가 있습니다. 나는이 문제에 대한 이전 질문을 열람했으나 도움이되지는 못했다.JTable 셀의 JComboBox

colModel.getColumnExt(HDTableAdapter.STATUS).setCellEditor(editorCB); 
colModel.getColumnExt(HDTableAdapter.STATUS).setCellRenderer(rendererCB); 

class comboBoxRenderer extends JComboBox implements TableCellRenderer { 

    public comboBoxRenderer(String[] items) { 
     super(items); 
    } 

    public Component getTableCellRendererComponent(JTable table, Object value, 
      boolean isSelected, boolean hasFocus, int row, int column) { 
     if (isSelected) { 
      setForeground(table.getSelectionForeground()); 
      super.setBackground(table.getSelectionBackground()); 
     } else { 
      setForeground(table.getForeground()); 
      setBackground(table.getBackground()); 
     } 

     setSelectedItem(value); 
     return this; 
    } 
} 

class comboBoxEditor extends DefaultCellEditor { 
    public comboBoxEditor(String[] items) { 
     super(new JComboBox(items)); 
    } 
} 

을하지만,이 경우에, 나는 세포 내부하지 않은 편집 가능한 콤보 상자를 얻을 :

나는 시도했다.

+1

자바 명명 규칙을 배우십시오 왜 당신이 깜짝 – kleopatra

+0

그들을 스틱? JComboBox는 기본적으로 _not_ 편집 가능하지 않습니다. – kleopatra

+3

하나의 주석은 다른 것을 쫓고 있습니다 JXTable 비트를 알았습니다 : _dont_ 렌더러를 구현하고 (대신 SwingX!), 지원되지 않는 구성 요소 유형에 대해 ComponentProvider를 서브 클래 싱합니다 (테스트 섹션의 xxVisualCheck에 예제가 있습니다. , xx == Renderer 또는 == JXTable (정확히 말하면 정확히 말하지 않을 것) – kleopatra

답변

1

귀하의 ComboxEditor 잘못 보이는 .. 대신를 사용

class ComboBoxEditor extends DefaultCellEditor { 

    public ComboBoxEditor(String[] items) { 
    super(new JComboBox(items)); 
    JCombobxToolTipRenderer renderer = new JCombobxToolTipRenderer(); 
    ((JComboBox)editorComponent).setRenderer(renderer); 
} 

public ComboBoxEditor(ComboBoxModel aModel) { 
    super(new JComboBox(aModel)); 
    JCombobxToolTipRenderer renderer = new JCombobxToolTipRenderer(); 
    ((JComboBox)editorComponent).setRenderer(renderer); 
} 
} 

class JCombobxToolTipRenderer extends DefaultListCellRenderer { 

@Override 
public Component getListCellRendererComponent(JList list, Object value, 
        int index, boolean isSelected, boolean cellHasFocus) { 

    JComponent comp = (JComponent) super.getListCellRendererComponent(list, 
      value, index, isSelected, cellHasFocus); 

    if (-1 < index && null != value) { 
     list.setToolTipText((String) value); 
    } 
    return comp; 
} 
} 
+0

나는 JCombobxToolTipRenderer/JComboBoxToolTipRenderer ..해야할지 모르겠다 ..? – AlenBer

+0

임의의 코드 스 니펫 (해당 점에서 @mKorbel을 모방하지 마십시오 :-) OP 편집기는 훌륭하게 작동해야합니다. 결국은 슈퍼와 정확히 동일한 기능을 가진 편리한 서브 클래스입니다. – kleopatra

+0

죄송합니다 .. 오랫동안 저에게 쓴 수업을 보면서 언제든지 보내지 않았습니다. 나는이 클래스들을 사용하고 모든 것이 잘 돌아 간다. TableColumnModel을 서브 클래 싱 해 봤어? 이 코드를 게시 할 수 있습니까? – sethu

0

이 시도,

class FinCellEditor extends AbstractCellEditor implements TableCellEditor{ 

    Component component; 

    private JTextField text; 
    private JComboBox combo; 
    private int rowIndex; 

     public FinCellEditor(){ 
       text = new JTextField(); 
       combo =new JComboBox(); 
     } 

    @Override 
     public Object getCellEditorValue() { 
       Object select = null; 
       if(rowIndex==9||rowIndex==10){ 
       select = combo.getSelectedItem(); 
       return select; 
       }else{  
       if(select!=null){ 
        text.selectAll(); 
       } 
       select = text.getText(); 
       return select; 
       } 
     } 
    @Override 
     public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 
       if (row == 7) {  
        date.setEnabled(true); 
        rowIndex=row; 
        return date; 
       }else if (row == 9) { 
       combo.removeAllItems(); 
       combo.addItem("Male"); 
       combo.addItem("Female"); 
       rowIndex=row; 
       return combo; 
      }else if (row == 10) { 
       combo.removeAllItems(); 
       combo.addItem("Married"); 
       combo.addItem("UnMarried"); 
       rowIndex=row; 
       return combo; 

      } else { 
       text.setEnabled(true); 
       rowIndex=row; 
       return text; 
      } 
     }