Java 使用预定义模型在JTable中显示特定列

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

我有一个包含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 {

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。如果这不是一个,请编辑您的问题以包含一个显示您当前方法的问题。