JTable:如何使JComboBox单元格渲染器大于渲染单元格?

时间:2013-01-28 13:00:55

标签: java swing jtable jcombobox

我使用这个JTable方法创建一个带有JComboBox的Cell作为渲染外观。

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;
    }

}

我的问题是组合框始终是细胞的大小。我不要那个。是否可以使组合框更大?组合框中的一些选项太大而且是半隐藏的。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

  

我的问题是组合框始终是细胞的大小。我做   不想那样。是否可以使组合框更大?一些   组合框中的选项太大而且是半隐藏的。

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

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

  • 创建弹出式未修饰JDialog(可编辑JComboBox),JWindow,放置JComboBox

  • 添加ListSelectionListener(必须将ListSelectionMode更改为SINGL E)

  • KeyBinding JTableTableCellEditordouble_clickF2内置的JDialog内置更改,以显示JWindow / {{1必须以sc Point为中心,setVisible必须包裹在invokeLater

  • 添加ItemListener,测试SELECTED,选择将值存储到(setValueAt()XxxTableModel,然后隐藏JDialog / { {1}}

  • 仅对JWindow个实例使用一个JDialog(内容窗格中的removeAll重用GUI的另一个操作),{{1}只使用一个JVM }}