質問

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

したがって、私の考えは、setCellEditor()を使用して<=>の行と列を確認し、毎回新しいエディターを設定することです。

ただし、<=>を2回呼び出しても効果はありません。エディターは最初に設定されたままです。では、どうすれば<!> quot; setCellEditor <!> quot;同じ列でもう一度作業しますか?

<=>のコードは次のとおりです。

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));
}
役に立ちましたか?

解決

コードが機能しない理由はわかりません(Swingを行ってからしばらく経ちました)が、なぜ単にオーバーライドしないのですか

public TableCellEditor getCellEditor(int row, int column)

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

他のヒント

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top