2011-10-26 171 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)); 
    } 
} 

但在這種情況下,我得到的細胞內未編輯的ComboBox。

+1

請學習java的命名規則,並堅持他們 – kleopatra

+0

你爲什麼驚訝? JComboBox在默認情況下是不可編輯的... – 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; 
      } 
     }