web-dev-qa-db-ja.com

SwingのJTableの列を非表示にする方法Java

私は1つのJTableを使用して1つのGUIを設計し、そこから2つの列を非表示にする必要があります。どうすればいいですか?

35
om.

TableColumnからTableColumnModelを削除します。

_TableColumnModel tcm = table.getColumnModel();
tcm.removeColumn( tcm.getColumn(...) );
_

データにアクセスする必要がある場合は、table.getModel().getValueAt(...)を使用します。

ユーザーが望むように列を非表示/表示できるより複雑なソリューションについては、 Table Column Manager をチェックアウトしてください。

62
camickr

最初にビューから列を削除します

 table.removeColumn(table.getColumnModel().getColumn(4));

次に、モデルからデータを取得します。

table.getModel().getValueAt(table.getSelectedRow(),4);

注意すべきことの1つは、データを取得するとき、テーブルからではなくモデルから取得する必要があることです。

34
zawhtut

どちらも機能する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に設定したら、タブ移動を試してください。ユーザーを混乱させます。」

15
Mr. Xymon

私は同じ問題を抱えていたので、私はTableColumnModelremovColumn();を使用しているので私を助けないのでこれを使用しました

table.getColumnModel().getColumn(0).setWidth(0);
table.getColumnModel().getColumn(0).setMinWidth(0);
table.getColumnModel().getColumn(0).setMaxWidth(0); 

それは私のためにうまく働いた、それは列0を隠し、それからまだ値を得ることができる

6
Anti Atlas Dev

JTableから列を削除しても、列はTableModelに残ります。

たとえば、最初のID列を削除するには:

TableColumnModel tcm = table.getColumnModel();
tcm.removeColumn(tcm.getColumn(0));

削除された列の値にアクセスする場合は、getValueAtではなく、TableModelJTable関数を使用してアクセスする必要があります。ただし、モデル内のrowIndexに変換して、rowIndexに戻す必要があります。

たとえば、選択した行の最初の列にアクセスする場合:

int modelRow = table.convertRowIndexToModel(table.getSelectedRow());
int value = (Integer)table.getModel().getValueAt(modelRow,0);
0
Foltin