2017-09-19 42 views
0

我使用的JXTable有一个setColumnControlVisible(true),它显示了滚动上方右上角的一个按钮,我们可以通过按下来显示和隐藏列。我想记住应用程序关闭时的更改,但还不能确定,在这里我尝试了至今。我检查JxTable的src,但没有如何获取隐藏的列索引或列号。Jtable显示并隐藏列并保存配置。

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); 
    } 

} 

回答

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)); 
+0

谢谢。这样一个简单的逻辑。 –