【问题标题】:Jcheckbox value in jtable based event trigger基于 jtable 的事件触发器中的 Jcheckbox 值
【发布时间】:2013-02-26 21:44:59
【问题描述】:

我正在使用 netbeans 中的 java swings。我的表单中有一个 jtable,它将使用 mysql 数据库中的值填充。该表根据用户选择的表不断变化。我已经添加了一列复选框结束。现在无论显示什么表,我都只通过覆盖使最后一列可编辑是单元格可编辑功能。

所以现在复选框列是可编辑的。当与该行相对应的复选框被签入时,我想让剩余的几列成为可编辑的,并且我希望在复选框被选中后使该行不可编辑签出!!

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

提前致谢。

【问题讨论】:

  • "If any other details required pls do ask...": 是的,到目前为止你都尝试过什么,怎么没用?
  • 我想知道如何编辑 isCellEditable(row,col) 函数,以便行在选中复选框时变为可编辑,在取消选中复选框时变为不可编辑。如果有任何链接或代码用于监听复选框选择事件,然后根据复选框列的布尔值触发使单元格可编辑和可编辑的操作,这将很有帮助。
  • 您不会找到完全回答您问题的教程,但您会找到处理问题各个方面的教程,您的工作就是将所有这些综合在一起。研究使用 TableModelListener 并监听模型的变化。确定更改的位置和类型。如果是复选框列的布尔值更改,则让模型更改 isCellEditable(...) 返回的值以获取相应的行和列。
  • 我认为您来这里寻求建议可能为时过早,因为您甚至还没有处于“提出特定问题”阶段,更不用说“创建试用计划”阶段了。我会阅读 JTable 教程,尝试解决问题的各个方面,然后在您可以就卡在哪里提出具体问题时回来。
  • 好的,谢谢你的提示。我会尝试使用 TableModelListener,如果有任何具体问题会再次发布。

标签: java swing jtable jcheckbox


【解决方案1】:

克利奥帕特拉当然是对的——不需要倾听者。您需要做的就是让模型检查感兴趣行的最后一列保存的布尔值,并将其作为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();
   }

}

哪些可以测试:

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();
         }
      });
   }
}

【讨论】:

  • 谢谢。。它现在正在工作!!我非常感谢你们。再次感谢
  • @user2083089:不客气。感谢您就此事回复我们。
猜你喜欢
  • 1970-01-01
  • 2021-05-05
  • 1970-01-01
  • 2021-11-26
  • 2012-10-21
  • 1970-01-01
  • 2019-05-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多