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

をしかし、この場合には、私は、細胞内の編集可能なコンボボックスではないを取得します。あなたのComboxEditorが間違って見える

+1

、これを試してみてくださいJavaの命名規則を学び、あなたが驚いている理由を彼らに – kleopatra

+0

を貼り付けてください? JComboBoxはデフォルトでは編集不可_ – kleopatra

+3

1つのコメントは他を追いかけています JXTableビットに気付きました:_dont_レンダラーを実装しました(SwingXでも!)、サポートされていないコンポーネントタイプのComponentProviderをサブクラス化します(テストセクションのxxVisualCheck 、xx ==レンダラーか==レンダラーか== JXTable(たぶん正確には思い出しません) – kleopatra

答えて

1

..代わりにこれを使用する:

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のエディタはうまく動作している必要があります。結局のところ、superとまったく同じ機能を持つ便利なサブクラスです。 – 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; 
      } 
     } 
関連する問題