質問

あるいは、書籍やwebサイト上の作成 JTable?いつのカラムを自由に編集できます。これを継承 JCheckBox コンポーネント(またこちら)を一つのテーブルのカラムだけでなく、テーブルを入れて JCheckBox に基づいて編集可能 boolean ます。

を持ってい JFCのSwingチュートリアルの第二弾 予だいがある場合その他の事例にも見習にどう対処すればよいかというテーブルです。のうのでjava"トレイルウェブサイトのナビゲーションとるのは、理に適っていると思います。

私を再度読み込んで、好奇心い発見がいかなる貢献ができるか。

役に立ちましたか?

解決

にカラムを編集可能にするをオーバーライド isCellEditable 方法の TableModel.の作成 TableModel かなりやすい場合は継承し AbstractTableModel ていただきたいと思いますですが、最もシンプルな JTables.

しかし、対応を TableModel の一部でしかない必要があります。実際に取得し、カスタムコンポーネント JTable, を設定する必要があり、カスタムセルレンダリング.利用型カスタムコンポーネントを設定する必要があり、カスタムセル編集者。場合には、使用をややmodificatedバージョンのデフォルトのクラスです。

編集者

願いする場合がございったカスタムコンポーネントは簡単に利用団:新しいクラスの実施 TableCellEditor, 戻る 新しい インスタンスのコンポーネント getCellEditorComponent 方法。のパラメータをこの方法は、電流値などの細胞座標、リンクのテーブルや天気なの細胞を選択します。

TableCellEditor もる方法を要求されたときに呼び出されるのユーザーの為の変化の細胞内容できる検証のユーザー入力、調整モデル)を解除または編集できるようになります。必ずお電話に stopEditing() 法エディタがプログラムにabort編集、その他のエディタコンポーネントは画面上で--今回は私のように2時間debug.

ご注意内 JTable 編集者や のみ エディタ受信イベントが盛りだくさん!を表示するボタンでも使用できない、レンダリング.ある機能ボタンを導入するために必要なエディタの修正 EventListeners 登録されます。登録リスナーをレンダリングでは何も行いません。

レンダリング

実施レンダリングではなく必要などについて説明していただけまにおうかがいますが、通常の時点でかいのを修正.レンダリングとは異なり、編集者、速重要です。 getTableCellRendererComponent のレンダリングは回毎にテーブルのセル! の成分によって返されるレンダリングは塗装に使用されるの細胞は相互作用とすることができれば、"再利用"は、次の細胞。つまり、調整のコンポーネント(例えばを使用 setText(...) または setFont(...) の場合は TextComponent のレンダリングす ない インスタンスを生成新しいものが手軽に行うことができるcripple。

注意

このためのレンダリング、編集者の仕事に必要なもの JTable するために使用されるレンダリング/editor.が基本的には二つの方法ではないかと思います。デフォルトに設定することができセルレンダリング/エディタ 一定タイプ を用い、それぞれの JTable ます。この方法、お TableModel ニーズに戻すこのタイプの getColumnClass(...) 法とは!デフォルトのテーブルモデル ない このまま返します Object.class.いつstumped多くの人です。

の他の方法でセットのエディター/レンダリングでは明示的に設定することで、カラムそのものであって、 TableColumngetTableColumn(...) の方法 JTable.これは多くの精巧なかでも、二つの異なるレンダリング/編集者のための単一のクラスです。E.g.モデルが二列のクラスの文字列が描画される完全に異なる方法でも一度使用 JLabel/DefaultRenderer その他の使用 JButton アクセス詳します。

JTable そのカスタムレンダリングや編集者が 非常に 汎用性のものも多く、がん間違っています。幸運を祈っています。

利用テーブルのSwingチュートリアル 必ず読み方customising JTables.特に、読みや読み直し メニューの詳細は後日発表され編集者やレンダリング で一般的には時間がかかりますようお願い申し上げます"をクリック.の例にカスタムレンダリングや編集者も非常に価値がある。

他のヒント

にしたいクラスへの拡張を行動でDefaultTableModel.することなく、独自に定義す。ィチュートリアルです sunのサイト.

このチュートリアルの javaのロビー りやすく案内します。オンライン スイングトレイルのためのJTable を参照することを示しています。たまスキャン全体を通してのものでよりよくない新しい常に良いですか?

れば利用しようと簡単に JTable 1列が編集可能なあけましておめでとうございますの欄に位置すが、常にデフォルトテーブルモデルや過負荷の isCellEditable ます。

のようなこと:

myTable.setModel(new DefaultTableModel(){
@Override
public boolean isCellEditable(int row, int column) {
    if (column == x) {
        return true;
    } else
        return false;
}
});

のチェックボックスをレンダリングクラス

MyCheckBoxRenderer extends JCheckBox implements TableCellRenderer

つかの有用なクラス:

Package javax.swing.table :

TableModel -インタフェース tablemodel AbstractTableModel エクスペディアのキャンセルのクラスの拡張を作成するテーブルとカスタムデータ構造 DefaultTableModel デフォルトテーブルモデルに対応できる arrays[]Vectors

を無効にする編集の任意のセルに必要なものをオーバーライド isCellEditable(int row, int col) 方法

テーブルにモデルを、オーバーライド"isCellEditable"と"setValueAt"機能についてのものです。
列の4つのカラムのために編集可能な細胞。
そのままダブルクリックし、細胞タイプ、
setValueAt()が呼ばれますと保存の値は、tableModelのい分野col4.

public ArrayList<XXXDO> tbmData = new ArrayList<XXXDO>(); //arraylist for data in table

@Override
public boolean isCellEditable(int row, int col) {
    if (col == 4) {
        return true;
    } else {
        return false;
    }
}

@Override
public void setValueAt(Object value, int row, int col) {
    if ((row >= 0) && (row < this.tbmData.size()) && (col >= 0) && (col < this.colNm.length)) {
        if (col == 4) {
            tbmData.get(row).col4= (String) value;
        }
        fireTableCellUpdated(row, col);
    } else {
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top