需要在JTable中动态添加JCheckBox

时间:2011-08-07 10:27:55

标签: java swing jtable jcombobox renderer

我有两个JTable。一个JTable中有一定数量的记录。

加载第一个JTable后,我想在第二个表中加载相同数量的JCheckbox

我有这个场景... vl传递方法addCheckBox中的两个表。

private void addCheckBox(JTable procTableSrc, JTable procTableCk){

    CheckBoxRenderer checkBoxRenderer = new CheckBoxRenderer();
    EachRowRenderer rowRenderer = new EachRowRenderer();
    int rows = procTableSrc.getRowCount();

    DefaultTableModel dm = (DefaultTableModel)procTableCk.getModel();

    Object [] data = new Object[][]{{new Boolean(false)},{new Boolean(false)}}; 

    for(int i=1; i <=rows; i++){
        rowRenderer.add(i, checkBoxRenderer);           
        //model.addRow(new Object []{new Boolean(false)});
    }
}

请帮我一个代码来实现这一目标。

1 个答案:

答案 0 :(得分:5)

感谢您的编辑,但您仍可能希望向我们展示更多内容并告诉我们您当前代码导致的错误。

关于“CheckBoxRenderer”类,您不需要这个。请阅读JTable教程,您可以找到here。在那里,您将看到您需要做的就是覆盖表模型的getColumnClass方法,以返回感兴趣的列的Boolean.class,以显示复选框。

运气。

编辑1
还有什么是“行渲染器”,它的用途是什么?要向JTable添加信息,必须向其模型添加行,并且我看不到您的代码正在执行此操作。看看DefaultTableModel API,你会看到addRow(...)方法,它可以帮助你很多。或者用数据数组创建一个新的DefaultTableModel对象。实际上,这可能更好,因为您可以覆盖其getColumnClass()方法以返回需要显示复选框的列的布尔值。

编辑2
此外,由于您将其声明为一维数组并将其初始化为二维数组,因此无法编译。:

Object [] data = new Object[][]

考虑执行以下操作:

  • 创建一个Object的二维数组,并保存模型的数据。数组的第一个索引是JTable中显示的行数,第二个是列数。
  • 用您的布尔人填写每个栏目位置。
  • 创建一个新的DefaultTableModel对象,该对象覆盖getColumnClass(...),并为包含布尔值并需要显示复选框的列返回Boolean.class。
  • 为它提供一个构造函数,允许您传入2-D Object数组,也可能传入列标题的String数组。构造函数的第一行应该是对超级构造函数的调用,您需要将数组参数传递给此调用。
  • 调用你的procTableCk对象上的setModel,传递你刚刚创建的这个模型。