質問
前の質問の答えを探していて、克服するための独創的なアイデアがありました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)。これにより、任意のセルに必要なエディターを返すことができます。
所属していません StackOverflow