私は1つのJTableを使用して1つのGUIを設計し、そこから2つの列を非表示にする必要があります。どうすればいいですか?
TableColumn
からTableColumnModel
を削除します。
_TableColumnModel tcm = table.getColumnModel();
tcm.removeColumn( tcm.getColumn(...) );
_
データにアクセスする必要がある場合は、table.getModel().getValueAt(...)
を使用します。
ユーザーが望むように列を非表示/表示できるより複雑なソリューションについては、 Table Column Manager をチェックアウトしてください。
最初にビューから列を削除します
table.removeColumn(table.getColumnModel().getColumn(4));
次に、モデルからデータを取得します。
table.getModel().getValueAt(table.getSelectedRow(),4);
注意すべきことの1つは、データを取得するとき、テーブルからではなくモデルから取得する必要があることです。
どちらも機能する2つの可能な解決策を試しましたが、最初の解決策で問題が発生しました。
_ table.removeColumn(table.getColumnModel().getColumn(4));
_
または
_ table.getColumnModel().getColumn(4).setMinWidth(0);
table.getColumnModel().getColumn(4).setMaxWidth(0);
table.getColumnModel().getColumn(4).setWidth(0);
_
私の最近のケースでは、TableRowSorterを追加したため、2番目のソリューションを好みました。
_ TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
table.setRowSorter(sorter);
_
table.removeColumn(table.getColumnModel().getColumn(4))
を使用すると、ビュー/テーブルから列が物理的に削除されるため、table.getValueAt(row, 4)
を使用できません-ArrayIndexOutOfBounds
を返します。削除された列の値を取得する唯一の方法は、table.getModel().getValueAt(table.getSelectedRow(),4)
を呼び出すことです。 TableRowSorterはテーブルにあるもののみをソートし、DefaultTableModelオブジェクトのデータはソートしないため、問題は値を取得するときですafterレコードをソートする-ソートされていないDefaultModelObjectからデータを取得します。
だから私は2番目のソリューションを使用してからtable.getValueAt(table.getSelectedRow(),4);
を使用しました
2番目のアプローチで私が見る唯一の問題は@camickrによって言及されました:」幅を0に設定したら、タブ移動を試してください。ユーザーを混乱させます。」
私は同じ問題を抱えていたので、私はTableColumnModel
removColumn();
を使用しているので私を助けないのでこれを使用しました
table.getColumnModel().getColumn(0).setWidth(0);
table.getColumnModel().getColumn(0).setMinWidth(0);
table.getColumnModel().getColumn(0).setMaxWidth(0);
それは私のためにうまく働いた、それは列0を隠し、それからまだ値を得ることができる
JTable
から列を削除しても、列はTableModel
に残ります。
たとえば、最初のID列を削除するには:
TableColumnModel tcm = table.getColumnModel();
tcm.removeColumn(tcm.getColumn(0));
削除された列の値にアクセスする場合は、getValueAt
ではなく、TableModel
のJTable
関数を使用してアクセスする必要があります。ただし、モデル内のrowIndexに変換して、rowIndexに戻す必要があります。
たとえば、選択した行の最初の列にアクセスする場合:
int modelRow = table.convertRowIndexToModel(table.getSelectedRow());
int value = (Integer)table.getModel().getValueAt(modelRow,0);