当前位置:  开发笔记 > 编程语言 > 正文

将JComboBox放入JTable

如何解决《将JComboBox放入JTable》经验,为你挑选了1个好方法。

我想将各个JComboBox放入JTable的每个单元格中.即.每个单元格的JComboBox内容并不相同.

我基本上希望能够只调用以下代码将一行JComboBox添加到JTable中.任何人有任何想法?谢谢

JComboBox cb1 = new JComboBox(...);
JComboBox cb2 = new JComboBox(...);
model.addRow(new Object[] {"Row name", cb1, cb2} );

JComboBox cb3 = new JComboBox(...);
JComboBox cb4 = new JComboBox(...);
model.addRow(new Object[] {"Row name 2", cb3, cb4} );

我能找到的最接近的示例代码如下.但是对于单个列的JComboBox内容是相同的.不是我需要的解决方案.

TableColumn col = table.getColumnModel().getColumn(vColIndex);
col.setCellEditor(new MyComboBoxEditor(values));

哪里

public class MyComboBoxEditor extends DefaultCellEditor {
    public MyComboBoxEditor(String[] items) {
        super(new JComboBox(items));
    }
}

小智.. 9

使用以下代码扩展JTable:

@Override
public TableCellEditor getCellEditor(int row, int column) {
   Object value = super.getValueAt(row, column);
   if(value != null) {
      if(value instanceof JComboBox) {
           return new DefaultCellEditor((JComboBox)value);
      }
            return getDefaultEditor(value.getClass());
   }
   return super.getCellEditor(row, column);
}

这将为您获得值的每个组合框创建一个唯一的JComboBox单元格编辑器.



1> 小智..:

使用以下代码扩展JTable:

@Override
public TableCellEditor getCellEditor(int row, int column) {
   Object value = super.getValueAt(row, column);
   if(value != null) {
      if(value instanceof JComboBox) {
           return new DefaultCellEditor((JComboBox)value);
      }
            return getDefaultEditor(value.getClass());
   }
   return super.getCellEditor(row, column);
}

这将为您获得值的每个组合框创建一个唯一的JComboBox单元格编辑器.


+1 - 一个也应该在相应列的`TableColumnModel`上设置一个自定义`TableCellRenderer`,以确保绘制选定的值而不是字符串`javax.swing.JCombobox [...]`单元格未被编辑.这个`TableCellRenderer`应该实现`getTableCellRendererComponent(..)`并且可以返回一个`JLabel`,其值为`JComboBox.getSelectedItem().toString()`(在检查空指针之后).
推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有