我正在使用NetBeans中的java swing。我在表单中有一个jtable,它将使用来自mysql数据库的值填充。表格根据用户选择的表动态地动态更改。我在最后添加了一列复选框。现在无论显示哪个表,我只通过覆盖可编辑的最后一列进行编辑。基于Jtable的事件触发器中的Jcheckbox值
所以现在复选框的列是可编辑的。我想让其余列的蜜蜂可编辑,当该行对应的复选框被签入时,我想让该行不可编辑一旦复选框被检出!
我需要帮助来完成这项任务。如果需要其他细节请问。
在此先感谢。
我正在使用NetBeans中的java swing。我在表单中有一个jtable,它将使用来自mysql数据库的值填充。表格根据用户选择的表动态地动态更改。我在最后添加了一列复选框。现在无论显示哪个表,我只通过覆盖可编辑的最后一列进行编辑。基于Jtable的事件触发器中的Jcheckbox值
所以现在复选框的列是可编辑的。我想让其余列的蜜蜂可编辑,当该行对应的复选框被签入时,我想让该行不可编辑一旦复选框被检出!
我需要帮助来完成这项任务。如果需要其他细节请问。
在此先感谢。
Kleopatra当然是对的 - 不需要听众。您所需要做的就是让模型检查感兴趣的行最后一列所保存的布尔值,并将其作为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 2013-02-26 04:55:22
@ user2083089:不客气。感谢您回复我们。 – 2013-02-26 13:44:50
'“如果需要的话请不要问任何其他细节......”':是的,你尝试过什么到目前为止,它是如何工作的? – 2013-02-18 22:08:34
我想知道如何编辑isCellEditable(row,col)函数,以便在选择复选框时行可以编辑,并在取消选择复选框时变为不可编辑。如果有任何链接或代码用于侦听复选框选择事件,然后根据复选框列的布尔值触发使单元格可编辑和可识别的操作,将会有所帮助。 – user2083089 2013-02-19 02:13:11
你不会找到完全回答你的问题的教程,但你会找到处理你的问题的各个方面的教程,这将是你的工作,将所有这些综合在一起。查看使用TableModelListener并监听模型的更改。确定更改的位置和类型。如果它是复选框列的布尔变化,那么让模型更改'isCellEditable(...)'返回的适当行和列的值。 – 2013-02-19 02:33:37