jtabel 遍历_使用抽象表模型获取JTable中选定的行

在下面的示例中,TableModel更新Set checked在执行setValueAt()..相邻模型JList侦听表的模型并显示当前选定的行号。该示例假定所选行数与行数相比较小。注意使用TreeSet,其迭代器保留了元素的自然顺序。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.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;/** @see http://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);

}

};

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 

rowList.add(Boolean.FALSE);

}

}

@Override

public int getRowCount() {

return rows;

}

@Override

public int getColumnCount() {

return 2;

}

@Override

public String getColumnName(int col) {

return "Column " + col;

}

@Override

public Object getValueAt(int row, int col) {

if (col == 0) {

return row;

} else {

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 col == 1;

}

}}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值