需要在JTable中动态添加JCheckBox

Gau*_*rav 2 java swing jtable renderer jcombobox

我有两个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)});
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Hov*_*els 5

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

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

运气.

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

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

Object [] data = new Object[][]
Run Code Online (Sandbox Code Playgroud)

考虑执行以下操作:

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