Java 基于jtable的事件触发器中的Jcheckbox值

Java 基于jtable的事件触发器中的Jcheckbox值,java,swing,jtable,jcheckbox,Java,Swing,Jtable,Jcheckbox,我正在使用netbeans中的java Swigs。我的表单中有一个jtable,其中将填充mysql数据库中的值。该表根据用户选择的表不断动态更改。我在末尾添加了一列复选框。现在,无论显示什么表,我都只设置了最后一列可通过重写进行编辑单元格编辑功能 因此,现在复选框列是可编辑的。我想在签入对应于该行的复选框时使剩余的几列可编辑,并且在签出该复选框后使该行不可编辑 我需要帮助来完成这项任务。如果需要任何其他细节,请询问 提前谢谢。克利奥帕特拉当然是对的——不需要听众。您需要做的就是让模型检查感兴

我正在使用netbeans中的java Swigs。我的表单中有一个jtable,其中将填充mysql数据库中的值。该表根据用户选择的表不断动态更改。我在末尾添加了一列复选框。现在,无论显示什么表,我都只设置了最后一列可通过重写进行编辑单元格编辑功能

因此,现在复选框列是可编辑的。我想在签入对应于该行的复选框时使剩余的几列可编辑,并且在签出该复选框后使该行不可编辑

我需要帮助来完成这项任务。如果需要任何其他细节,请询问


提前谢谢。

克利奥帕特拉当然是对的——不需要听众。您需要做的就是让模型检查感兴趣行的最后一列所保留的布尔值,并将其作为
isCellEditable()
值返回

例如:

@SuppressWarnings("serial")
class MyTableModel extends DefaultTableModel {
   public static final String SELECT = "select";
   String tablename;

   public MyTableModel(Object[][] rowData, Object[] columnNames, String tableName) {
      super(rowData, columnNames);
      this.tablename = tableName;
   }

   @Override
   public Class<?> getColumnClass(int columnIndex) {
      if (getColumnName(columnIndex).equalsIgnoreCase(SELECT)) {
         return Boolean.class;
      }
      return super.getColumnClass(columnIndex);
   }

   @Override
   public boolean isCellEditable(int row, int col) {
      if (col == getColumnCount() - 1) 
         return true;
      else
         return ((Boolean) getValueAt(row, getColumnCount() - 1)).booleanValue();
   }

}
@SuppressWarnings(“串行”)
类MyTableModel扩展了DefaultTableModel{
公共静态最终字符串SELECT=“SELECT”;
字符串表名;
公共MyTableModel(对象[][]行数据,对象[]列名称,字符串表名称){
超级(行数据、列名称);
this.tablename=tablename;
}
@凌驾
公共类getColumnClass(int columnIndex){
if(getColumnName(columnIndex).equalsIgnoreCase(选择)){
返回Boolean.class;
}
返回super.getColumnClass(columnIndex);
}
@凌驾
公共布尔值可编辑(int行,int列){
if(col==getColumnCount()-1)
返回true;
其他的
返回((布尔)getValueAt(行,getColumnCount()-1)).booleanValue();
}
}
可通过以下方式进行测试:

import javax.swing.*;
import javax.swing.table.*;

public class TestBoolTableModel {
   public static final Integer[][] DATA = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 },
         { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
   public static final String[] COL_NAMES = { "One", "Two", "Three", "Four",
         MyTableModel.SELECT };

   private static void createAndShowGui() {
      Object[][] rowData = new Object[DATA.length][];
      for (int i = 0; i < rowData.length; i++) {
         rowData[i] = new Object[DATA[i].length + 1];
         for (int j = 0; j < DATA[i].length; j++) {
            rowData[i][j] = DATA[i][j];
         }
         rowData[i][DATA[i].length] = Boolean.FALSE;
      }
      MyTableModel tableModel = new MyTableModel(rowData, COL_NAMES, "My Table");

      JTable table = new JTable(tableModel);
      JScrollPane scrollPane = new JScrollPane(table);

      JFrame frame = new JFrame("TestBoolTableModel");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(scrollPane);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
import javax.swing.*;
导入javax.swing.table.*;
公共类TestBoolTableModel{
公共静态最终整数[][]数据={{1,2,3,4},{5,6,7,8},
{ 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
公共静态最终字符串[]COL_name={“一”、“二”、“三”、“四”,
MyTableModel.SELECT};
私有静态void createAndShowGui(){
对象[][]行数据=新对象[DATA.length][];
对于(int i=0;i
克利奥帕特拉当然是对的——不需要听众。您需要做的就是让模型检查感兴趣行的最后一列所保留的布尔值,并将其作为
isCellEditable()
值返回

例如:

@SuppressWarnings("serial")
class MyTableModel extends DefaultTableModel {
   public static final String SELECT = "select";
   String tablename;

   public MyTableModel(Object[][] rowData, Object[] columnNames, String tableName) {
      super(rowData, columnNames);
      this.tablename = tableName;
   }

   @Override
   public Class<?> getColumnClass(int columnIndex) {
      if (getColumnName(columnIndex).equalsIgnoreCase(SELECT)) {
         return Boolean.class;
      }
      return super.getColumnClass(columnIndex);
   }

   @Override
   public boolean isCellEditable(int row, int col) {
      if (col == getColumnCount() - 1) 
         return true;
      else
         return ((Boolean) getValueAt(row, getColumnCount() - 1)).booleanValue();
   }

}
@SuppressWarnings(“串行”)
类MyTableModel扩展了DefaultTableModel{
公共静态最终字符串SELECT=“SELECT”;
字符串表名;
公共MyTableModel(对象[][]行数据,对象[]列名称,字符串表名称){
超级(行数据、列名称);
this.tablename=tablename;
}
@凌驾
公共类getColumnClass(int columnIndex){
if(getColumnName(columnIndex).equalsIgnoreCase(选择)){
返回Boolean.class;
}
返回super.getColumnClass(columnIndex);
}
@凌驾
公共布尔值可编辑(int行,int列){
if(col==getColumnCount()-1)
返回true;
其他的
返回((布尔)getValueAt(行,getColumnCount()-1)).booleanValue();
}
}
可通过以下方式进行测试:

import javax.swing.*;
import javax.swing.table.*;

public class TestBoolTableModel {
   public static final Integer[][] DATA = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 },
         { 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
   public static final String[] COL_NAMES = { "One", "Two", "Three", "Four",
         MyTableModel.SELECT };

   private static void createAndShowGui() {
      Object[][] rowData = new Object[DATA.length][];
      for (int i = 0; i < rowData.length; i++) {
         rowData[i] = new Object[DATA[i].length + 1];
         for (int j = 0; j < DATA[i].length; j++) {
            rowData[i][j] = DATA[i][j];
         }
         rowData[i][DATA[i].length] = Boolean.FALSE;
      }
      MyTableModel tableModel = new MyTableModel(rowData, COL_NAMES, "My Table");

      JTable table = new JTable(tableModel);
      JScrollPane scrollPane = new JScrollPane(table);

      JFrame frame = new JFrame("TestBoolTableModel");
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.getContentPane().add(scrollPane);
      frame.pack();
      frame.setLocationRelativeTo(null);
      frame.setVisible(true);
   }

   public static void main(String[] args) {
      SwingUtilities.invokeLater(new Runnable() {
         public void run() {
            createAndShowGui();
         }
      });
   }
}
import javax.swing.*;
导入javax.swing.table.*;
公共类TestBoolTableModel{
公共静态最终整数[][]数据={{1,2,3,4},{5,6,7,8},
{ 9, 10, 11, 12 }, { 13, 14, 15, 16 } };
公共静态最终字符串[]COL_name={“一”、“二”、“三”、“四”,
MyTableModel.SELECT};
私有静态void createAndShowGui(){
对象[][]行数据=新对象[DATA.length][];
对于(int i=0;i
“如果需要任何其他详细信息,请询问…”
:是的,到目前为止您尝试了什么,它是如何工作的?我想知道如何编辑isCellEditable(row,col)函数,以便选中复选框时行变为可编辑,取消选中复选框时行变为不可编辑。如果有任何链接或代码用于侦听复选框选择事件,然后根据布尔值触发使单元格可编辑和可注释的操作