我使用这个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;
}
}
我的问题是组合框始终是细胞的大小。我不要那个。是否可以使组合框更大?组合框中的一些选项太大而且是半隐藏的。
答案 0 :(得分:1)
覆盖JTable.editCellAt。这是通过在其上调用setBounds
来定位表格单元格编辑器的方法。只需以您喜欢的方式设置不同的边界,也许应该跨越多个列。
答案 1 :(得分:1)
我的问题是组合框始终是细胞的大小。我做 不想那样。是否可以使组合框更大?一些 组合框中的选项太大而且是半隐藏的。
Dimmension
,是不可能的,不要混淆用户
为了避免可能的副作用,我会
创建弹出式未修饰JDialog
(可编辑JComboBox
),JWindow
,放置JComboBox
添加ListSelectionListener
(必须将ListSelectionMode
更改为SINGL
E)
为KeyBinding
JTable
(TableCellEditor
或double_click
)F2
内置的JDialog
内置更改,以显示JWindow
/ {{1必须以sc Point
为中心,setVisible
必须包裹在invokeLater
添加ItemListener
,测试SELECTED
,选择将值存储到(setValueAt()
)XxxTableModel
,然后隐藏JDialog
/ { {1}}
仅对JWindow
个实例使用一个JDialog
(内容窗格中的removeAll
重用GUI
的另一个操作),{{1}只使用一个JVM
}}