java jtable 行_Java JTable中的多行选择

小编典典

使用@Hovercraft的示例和@camickr的建议,以下示例显示了合适的用户界面。尽管它使用按钮,但它SelectionAction也适用于菜单或弹出窗口。

import java.awt.*;

import java.awt.event.ActionEvent;

import javax.swing.*;

import javax.swing.DefaultListSelectionModel;

import javax.swing.table.DefaultTableModel;

/** @see http://stackoverflow.com/questions/4526779 */

public class CheckABunch extends JPanel {

private static final int CHECK_COL = 1;

private static final Object[][] DATA = {

{"One", Boolean.TRUE}, {"Two", Boolean.FALSE},

{"Three", Boolean.TRUE}, {"Four", Boolean.FALSE},

{"Five", Boolean.TRUE}, {"Six", Boolean.FALSE},

{"Seven", Boolean.TRUE}, {"Eight", Boolean.FALSE},

{"Nine", Boolean.TRUE}, {"Ten", Boolean.FALSE}};

private static final String[] COLUMNS = {"Number", "CheckBox"};

private DataModel dataModel = new DataModel(DATA, COLUMNS);

private JTable table = new JTable(dataModel);

private DefaultListSelectionModel selectionModel;

public CheckABunch() {

super(new BorderLayout());

this.add(new JScrollPane(table));

this.add(new ControlPanel(), BorderLayout.SOUTH);

table.setPreferredScrollableViewportSize(new Dimension(250, 175));

selectionModel = (DefaultListSelectionModel) table.getSelectionModel();

}

private class DataModel extends DefaultTableModel {

public DataModel(Object[][] data, Object[] columnNames) {

super(data, columnNames);

}

@Override

public Class> getColumnClass(int columnIndex) {

if (columnIndex == CHECK_COL) {

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

}

return super.getColumnClass(columnIndex);

}

@Override

public boolean isCellEditable(int row, int column) {

return column == CHECK_COL;

}

}

private class ControlPanel extends JPanel {

public ControlPanel() {

this.add(new JLabel("Selection:"));

this.add(new JButton(new SelectionAction("Clear", false)));

this.add(new JButton(new SelectionAction("Check", true)));

}

}

private class SelectionAction extends AbstractAction {

boolean value;

public SelectionAction(String name, boolean value) {

super(name);

this.value = value;

}

@Override

public void actionPerformed(ActionEvent e) {

for (int i = 0; i < dataModel.getRowCount(); i++) {

if (selectionModel.isSelectedIndex(i)) {

dataModel.setValueAt(value, i, CHECK_COL);

}

}

}

}

private static void createAndShowUI() {

JFrame frame = new JFrame("CheckABunch");

frame.add(new CheckABunch());

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.pack();

frame.setLocationRelativeTo(null);

frame.setVisible(true);

}

public static void main(String[] args) {

java.awt.EventQueue.invokeLater(new Runnable() {

@Override

public void run() {

createAndShowUI();

}

});

}

}

2020-03-01

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值