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;
}
}}
總結
以上是生活随笔為你收集整理的jtabel 遍历_使用抽象表模型获取JTable中选定的行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打印容器_3D打印:增材点阵结构在压力容
- 下一篇: cprintdialog预览_怎样用CP