0

私は前の質問に対する答えを探して いて、の制限を克服するための独創的なアイデアを持っていましたJTable。エディターは行ごとに異なる必要がありますが、列ごとにJTable1つのエディターしか処理できません。

したがって、私の考えは、を使用しMouseListenerての行と列をチェックし、JTable毎回新しいエディタを設定することです。

ただし、2回目の呼び出しsetCellEditor()は効果がありません。エディターは、最初に設定されたもののままです。では、どうすれば「setCellEditor」を同じ列で2回動作させることができますか?

これがのコードですMouseListener

public void mouseClicked(MouseEvent e) {
    int cols = resultTable.columnAtPoint(new Point(e.getX(), e.getY()));
    int rows = resultTable.rowAtPoint(new Point(e.getX(), e.getY()));
    StorageObject item = (StorageObject) resultTable.getModel().getValueAt(rows, cols);
    TableColumn col = resultTable.getColumnModel().getColumn(cols);
    col.setCellEditor(new MyComboBoxEditor(item.list));
}
4

2 に答える 2

3

コードが機能しない理由はわかりませんが(Swingを実行してからしばらく経ちます)、オーバーライドしてみませんか

public TableCellEditor getCellEditor(int row, int column)

あなたのJTableに?各行に使用するコンボボックスのマップを維持し、オーバーライドされたメソッドで正しいものを返します。

于 2009-01-19T16:34:12.187 に答える
1

私の理論では、Table / TableCellに登録されているすべてのマウスリスナーが呼び出されると、デフォルトでAPIクラスにインストールされているものが、マウスリスナーの前に最初に呼び出されます。これは、エディターを別のエディターに設定する前に、エディターをフェッチするイベントが発生することを意味します。競合状態のようなものですが、実際にはAPIソースコードのどこかで定義されています...これは私の素朴な理論であり、すでにいくつかの穴があります。

JTable.getCellEditor(int row、int col)をオーバーライドします。これにより、任意のセルに必要なエディターを返すことができます。

于 2009-01-19T16:32:33.750 に答える