1

このJTableメソッドを使用して、レンダリングされた外観としてJComboBoxを使用してセルを作成しています。

public void addComboBoxToColumn(String[] options, int column_index){
    ComboTableCellRenderer renderer = new ComboTableCellRenderer();
    JComboBox<String> combo = new JComboBox<String>(options);
    TableCellEditor combo_editor  = new DefaultCellEditor(combo);
    TableColumn column = getColumnModel().getColumn(column_index);
    column.setCellRenderer(renderer);
    column.setCellEditor(combo_editor);     
}

..。

public class ComboTableCellRenderer implements ListCellRenderer, TableCellRenderer 
{
    DefaultListCellRenderer listRenderer = new DefaultListCellRenderer();
    DefaultTableCellRenderer tableRenderer = new DefaultTableCellRenderer();

    private void configureRenderer(JLabel renderer, Object value)
    {
        if (value != null)
            renderer.setText((String)value);
    }

    public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus)
    {
        listRenderer = (DefaultListCellRenderer)listRenderer.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        configureRenderer(listRenderer, value);
        return listRenderer;
    }

    public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column)
    {
        tableRenderer = (DefaultTableCellRenderer)tableRenderer.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
        configureRenderer(tableRenderer, value);
        return tableRenderer;
    }

}

私の問題は、コンボボックスが常にセルのサイズであるということです。私はそれを望んでいません。コンボボックスを大きくすることはできますか?コンボボックスの一部のオプションは大きすぎて、半分隠されています。

4

2 に答える 2

1

JTable.editCellAtをオーバーライドします。これは、テーブルセルエディタを呼び出して配置するメソッドですsetBounds。好みの方法で境界を異なる方法で設定するだけです。おそらく、複数の列にまたがる必要があります。

于 2013-01-28T13:10:00.433 に答える
1

私の問題は、コンボボックスが常にセルのサイズであるということです。私はそれを望んでいません。コンボボックスを大きくすることはできますか?コンボボックスの一部のオプションは大きすぎて、半分隠されています。

  • Dimmension画面上のセルのジャンプなしでは不可能です、ユーザーを混乱させないでください

  • 起こりうる副作用を避けるために、私は

  • 装飾されていないポップアップを作成するJDialog(編集可能なJComboBox場合) 、、JWindowそこに置くJComboBox

  • 追加( EListSelectionListenerに変更ListSelectionModeする必要があります)SINGL

  • for (または)に組み込まれている変更を表示するKeyBinding/画面上の目的の中心に配置する必要があり、ラップする必要がありますJTableTableCellEditordouble_clickF2JDialogJWindowPointsetVisibleinvokeLater

  • 値を( )に格納するために選択された上で、を追加ItemListenerし、テストし、次に/を非表示にします。SELECTEDsetValueAt()XxxTableModelJDialogJWindow

  • インスタンス全体で1つだけを使用し(コンテンツペインから別のアクションでJDialog再利用)、removeAllGUIJVMJTable

于 2013-01-28T13:12:35.137 に答える