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

我的问题是组合框始终是单元格的大小。我不要那个。是否有可能使组合框更大?组合框中的某些选项太大且半隐藏。

  • 没有Dimmension屏幕上的单元格跳跃是不可能的,不要混淆用户

  • 为了避免可能的副作用,我会

  • 创建未装饰的弹出窗口JDialog(用于可编辑JComboBoxJWindow,,放在那里JComboBox

  • 添加ListSelectionListener(必须更改ListSelectionModeSINGLE)

  • 将内置的KeyBindingfor JTable(TableCellEditordouble_click)更改F2为显示JDialog/JWindow必须在屏幕上以所需为中心PointsetVisible必须包裹在invokeLater

  • add ItemListener, test for SELECTED, on 选择将值存储到 ( setValueAt()) XxxTableModel,然后隐藏JDialog/JWindow

  • 仅对整个实例使用一个JDialogremoveAll从内容窗格重用于从 的另一个操作),仅一个用于GUIJVMJTable

于 2013-01-28T13:12:35.137 回答
1

覆盖JTable.editCellAt。这是通过调用setBounds它来定位表格单元格编辑器的方法。只需以您喜欢的方式设置不同的边界,也许应该跨越几列。

于 2013-01-28T13:10:00.433 回答