Java 使用预定义模型在JTable中显示特定列
我有一个包含10列标题的JTable:“a”、“d”、“e”、“f”、“B”、“g”、“h”、“C”、“I”、“j”。我希望在第一视图中JTable只显示“a”、“B”、“C”,我有两个按钮,当单击ViewAll按钮时,所有列都显示,当单击hide JTable时,只显示三列标题为“a”、“B”、“C”。如何做到这一点?我的GridTable模型是:Java 使用预定义模型在JTable中显示特定列,java,swing,jtable,Java,Swing,Jtable,我有一个包含10列标题的JTable:“a”、“d”、“e”、“f”、“B”、“g”、“h”、“C”、“I”、“j”。我希望在第一视图中JTable只显示“a”、“B”、“C”,我有两个按钮,当单击ViewAll按钮时,所有列都显示,当单击hide JTable时,只显示三列标题为“a”、“B”、“C”。如何做到这一点?我的GridTable模型是: public abstract class GridTableModel<T> extends AbstractTableModel
public abstract class GridTableModel<T> extends AbstractTableModel {
private static final long serialVersionUID = 4283080272635443348L;
private List<T> rows = new ArrayList<T>();
/**
* The property used to find real index of rows that currently are shown to user.
*/
private int offset;
public abstract String[] getColumnNames();
@Override
public String getColumnName(int column) {
return getColumnNames()[column];
}
@Override
public int getColumnCount() {
return getColumnNames().length;
}
@Override
public int getRowCount() {
return rows == null ? 0 : rows.size();
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if (rows.size() > 0) {
return getValueAt(rows.get(rowIndex), rowIndex, columnIndex);
}
return null;
}
public void setData(List<T> results, int offset) {
this.rows = results;
this.offset = offset;
fireTableDataChanged();
}
public T get(int row) {
return rows.size() > 0 ? rows.get(row) : null;
}
public abstract Object getValueAt(T t, int rowIndex, int columnIndex);
public List<T> get(int[] rows) {
List<T> list = new ArrayList<T>();
for (int row : rows) {
list.add(this.rows.get(row));
}
return list;
}
public int getOffset() {
return offset;
}
public void setOffset(int offset) {
this.offset = offset;
}
public List<T> getRows() {
return rows;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
if (1==1) {
return Object.class;
}
return getValueAt(0, columnIndex).getClass();
}
公共抽象类GridTableModel扩展了AbstractTableModel{
私有静态最终长serialVersionUID=4283080272635443348L;
私有列表行=新的ArrayList();
/**
*用于查找当前显示给用户的行的实际索引的属性。
*/
私有整数偏移;
公共抽象字符串[]getColumnNames();
@凌驾
公共字符串getColumnName(int列){
返回getColumnNames()[column];
}
@凌驾
public int getColumnCount(){
返回getColumnNames().length;
}
@凌驾
public int getRowCount(){
返回行==null?0:rows.size();
}
@凌驾
公共对象getValueAt(int行索引、int列索引){
如果(rows.size()>0){
返回getValueAt(rows.get(rowIndex)、rowIndex、columnIndex);
}
返回null;
}
公共void setData(列表结果,整数偏移){
this.rows=结果;
这个偏移量=偏移量;
fireTableDataChanged();
}
公共T获取(int行){
返回rows.size()>0?rows.get(row):null;
}
公共抽象对象getValueAt(T,int-rowIndex,int-columnIndex);
公共列表获取(int[]行){
列表=新的ArrayList();
for(int行:行){
list.add(this.rows.get(row));
}
退货清单;
}
公共int getOffset(){
返回偏移量;
}
公共void setOffset(int offset){
这个偏移量=偏移量;
}
公共列表getRows(){
返回行;
}
@凌驾
公共类getColumnClass(int columnIndex){
如果(1==1){
返回Object.class;
}
返回getValueAt(0,columnIndex).getClass();
}
}JTable可以做到这一点,但您必须做一些工作才能做到这一点。基本上,TableModel需要保存所有要显示的数据。然后,您需要从ColumnModel中添加/删除TableColumn。如果这不是一个,请编辑您的问题以包含一个显示您当前方法的问题。