java多选框_如何实现复选框列表Java

本文介绍了如何在Java中创建一个包含复选框的表格。通过使用JTable、AbstractTableModel和JCheckBox,可以创建一个可编辑的表格,其中每个单元格都是一个复选框。当用户勾选或取消勾选复选框时,表格会更新,并可以通过监听器同步显示在JList中。
摘要由CSDN通过智能技术生成

匿名用户

你能告诉我怎么做吗?

使用一列JTable以及适当的呈现器和编辑器。基于此示例,下面的代码依赖于boolean.class类型的数据值的默认呈现器。这里举一个更一般的例子。

01653da4ea82435eca978c2c0c40a097.pngimport java.awt.Component;

import java.awt.Dimension;

import java.awt.EventQueue;

import java.awt.GridLayout;

import java.util.ArrayList;

import java.util.List;

import java.util.Set;

import java.util.TreeSet;

import javax.swing.BorderFactory;

import javax.swing.DefaultListModel;

import javax.swing.JCheckBox;

import javax.swing.JFrame;

import javax.swing.JList;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.event.TableModelEvent;

import javax.swing.event.TableModelListener;

import javax.swing.table.AbstractTableModel;

import javax.swing.table.TableCellRenderer;

/** @see https://stackoverflow.com/a/13919878/230513 */

public class CheckTable {

private static final CheckModel model = new CheckModel(5000);

private static final JTable table = new JTable(model) {

@Override

public Dimension getPreferredScrollableViewportSize() {

return new Dimension(150, 300);

}

@Override

public Component prepareRenderer(TableCellRenderer renderer, int row, int column) {

JCheckBox jcb = (JCheckBox) super.prepareRenderer(renderer, row, column);

jcb.setHorizontalTextPosition(JCheckBox.LEADING);

jcb.setText(String.valueOf(row));

return jcb;

}

};

public static void main(String[] args) {

EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

JFrame f = new JFrame("CheckTable");

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

f.setLayout(new GridLayout(1, 0));

f.add(new JScrollPane(table));

f.add(new DisplayPanel(model));

f.pack();

f.setLocationRelativeTo(null);

f.setVisible(true);

}

});

}

private static class DisplayPanel extends JPanel {

private DefaultListModel dlm = new DefaultListModel();

private JList list = new JList(dlm);

public DisplayPanel(final CheckModel model) {

super(new GridLayout());

this.setBorder(BorderFactory.createTitledBorder("Checked"));

this.add(new JScrollPane(list));

model.addTableModelListener(new TableModelListener() {

@Override

public void tableChanged(TableModelEvent e) {

dlm.removeAllElements();

for (Integer integer : model.checked) {

dlm.addElement(integer);

}

}

});

}

}

private static class CheckModel extends AbstractTableModel {

private final int rows;

private List rowList;

private Set checked = new TreeSet();

public CheckModel(int rows) {

this.rows = rows;

rowList = new ArrayList(rows);

for (int i = 0; i < rows; i++) {

rowList.add(Boolean.FALSE);

}

}

@Override

public int getRowCount() {

return rows;

}

@Override

public int getColumnCount() {

return 1;

}

@Override

public String getColumnName(int col) {

return "Column " + col;

}

@Override

public Object getValueAt(int row, int col) {

return rowList.get(row);

}

@Override

public void setValueAt(Object aValue, int row, int col) {

boolean b = (Boolean) aValue;

rowList.set(row, b);

if (b) {

checked.add(row);

} else {

checked.remove(row);

}

fireTableRowsUpdated(row, row);

}

@Override

public Class> getColumnClass(int col) {

return getValueAt(0, col).getClass();

}

@Override

public boolean isCellEditable(int row, int col) {

return true;

}

}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值