java jtable 可编辑_java-使JTable中的JCheckBox可编辑

我的JTable需要帮助.我正在编写一个程序,将数据库中的数据提取到JTable中.第一列应该是可编辑的JCheckBox,这样我就可以处理已检查(正确或错误)的行和数据.

我正在使用AbstractTableModel(类扩展了AbstractTableModel)并覆盖了这五个方法:

@Override

public boolean isCellEditable(int rowIndex, int columnIndex) {

return columnIndex == 0;

}

@Override

public Class> getColumnClass(int col) {

if (col == 0) {

return Boolean.class;

}

return super.getColumnClass(col);

}

@Override

public int getColumnCount() {

return header.length;

}

@Override

public int getRowCount() {

return data.length;

}

@Override

public Object getValueAt(int row, int col) {

return data[row][col];

}

要显示我使用的JTable:

JTable table = new JTable();

JScrollPane scrollpane = new JScrollPane();

.

.

.

table = new JTable(data, header);

table.setModel(this);

scrollpane = new JScrollPane(table);

我使用for循环将数据读取到数据数组中.我定义的标头数组.

基本上,我需要选中的行才能发送包含正确数据的邮件.

编辑:

package test;

import javax.swing.JFrame;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.table.AbstractTableModel;

public class TestCode extends AbstractTableModel {

private static final long serialVersionUID = -7051817393770003705L;

String[] header = {"", "header", "header", "header"};

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

public TestCode() {

JFrame frame = new JFrame();

JTable table = new JTable(data, header);

table.setModel(this);

JScrollPane scrollpane = new JScrollPane(table);

frame.add(scrollpane);

frame.setVisible(true);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

}

@Override

public boolean isCellEditable(int row, int col) {

return col == 0;

}

@Override

public Class> getColumnClass(int col) {

if (col == 0) {

return Boolean.class;

}

return super.getColumnClass(col);

}

@Override

public int getColumnCount() {

return header.length;

}

@Override

public int getRowCount() {

return data.length;

}

@Override

public Object getValueAt(int row, int col) {

return data[row][col];

}

public static void main(String[] args) {

TestCode code = new TestCode();

}

}

这是我的代码的简短片段,易于执行.我希望能够在firt列上检查JCheckBoxes,以便能够从该列读取true或false布尔值.

>谢谢您的帮助!

解决方法:

@Override

public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

// super.setValueAt(aValue, rowIndex, columnIndex); by default empty implementation is not necesary if direct parent is AbstractTableModel

data[rowIndex][columnIndex] = aValue;

fireTableCellUpdated(rowIndex, columnIndex);// notify listeners

}

结果.

顺便说一句:不要使用新的Boolean(false)而是使用Boolean.FALSE

标签:jcheckbox,swing,jtable,abstracttablemodel,java

来源: https://codeday.me/bug/20191122/2063618.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java JTable添加JCheckBox,需要创建一个自定义的TableCellEditor和TableCellRenderer。下面是一个简单的例子: ```java import java.awt.Component; import javax.swing.AbstractCellEditor; import javax.swing.JCheckBox; import javax.swing.JTable; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; public class CheckBoxCellEditorRenderer extends AbstractCellEditor implements TableCellEditor, TableCellRenderer { private static final long serialVersionUID = 1L; private JCheckBox checkBox; public CheckBoxCellEditorRenderer() { checkBox = new JCheckBox(); checkBox.setHorizontalAlignment(JCheckBox.CENTER); } @Override public Object getCellEditorValue() { return checkBox.isSelected(); } @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { checkBox.setSelected((Boolean) value); return checkBox; } @Override public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { checkBox.setSelected((Boolean) value); return checkBox; } } ``` 然后,在创建JTable时,将该自定义的TableCellEditor和TableCellRenderer设置到JTable的指定列即可,例如: ```java JTable table = new JTable(); table.getColumnModel().getColumn(0).setCellEditor(new CheckBoxCellEditorRenderer()); table.getColumnModel().getColumn(0).setCellRenderer(new CheckBoxCellEditorRenderer()); ``` 这样,第一列就会显示JCheckBox了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值