2017-09-19 5 views
0

私は、スクロールの上の右上隅にあるボタンを表示するsetColumnControlVisible(true)を持つJXTableを使用しています。これを押すと列を表示および非表示にすることができます。私は、アプリケーションが近づいたときの変更を覚えておきたいが、まだそれを把握することはできない。ここまで私が試したことはここにある。私は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

ありがとうございました。そのような単純な論理。 –

関連する問題