【问题标题】:Jtable show and hide column and save the configuration.Jtable 显示和隐藏列并保存配置。
【发布时间】:2018-02-27 21:14:07
【问题描述】:

我正在使用 JXTable,它有一个 setColumnControlVisible(true),它在滚动上方的右上角显示一个按钮,我们可以通过按下它来显示和隐藏列。我想记住应用程序关闭时的更改,但还无法弄清楚,这是我到目前为止所尝试的。我检查了 JxTable 的 src,但没有找到隐藏的列索引或列号。

package paractice;

import java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.table.AbstractTableModel;

import org.jdesktop.swingx.JXTable;

public class TableTest extends JFrame{

    private static final long serialVersionUID = 1L;
    private JXTable table;

    public TableTest() {
        setLayout(new BorderLayout());
        table = new JXTable(new model());
        //add(table.getTableHeader(), BorderLayout.NORTH);
        add(new JScrollPane(table), BorderLayout.CENTER);
        table.setColumnControlVisible(true);
        setSize(700, 700);


    }

    public class model extends AbstractTableModel{

        String[] columns = {"column1", "column2", "column3", "column4", "column5"};

        @Override
        public String getColumnName(int column) {
            return columns[column];
        }

        @Override
        public boolean isCellEditable(int arg0, int arg1) {
            return super.isCellEditable(arg0, arg1);
        }

        @Override
        public void setValueAt(Object arg0, int row, int col) {
            super.setValueAt(arg0, row, col);
            fireTableCellUpdated(row, col);
        }

        public int getColumnCount() {
            return columns.length;
        }

        public int getRowCount() {
            return 0;
        }

        public Object getValueAt(int arg0, int arg1) {
            return null;
        }

    }

    public static void main(String args[]) {
        TableTest test = new TableTest();
        test.setVisible(true);
    }

}

【问题讨论】:

    标签: swing swingx jxtable


    【解决方案1】:

    但不知道如何获取隐藏的列索引或列号。

    将 TableModel 与 JTableHeader 进行比较。

    只需创建一个简单的循环来检查 TableModel 的所有列名称,以查看表是否包含该列。比如:

    for (int i = 0; i < model.getColumnCount(); i++)
    {
        Object name = model.getColumnName();
    
        TableColumn column = table.getColumn( name );
    
        if (column == null)
            // column is hidden do your processing
    }
    

    那么下次显示表格时可以获取所有隐藏列的名称,然后使用:

    table.removeColumn( table.getColumn( name ) );
    

    【讨论】:

    • 谢谢。这么简单的逻辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2015-02-27
    • 1970-01-01
    相关资源
    最近更新 更多