0

望ましい動作は、特定のセルが選択されたときにExcelで提供されるミラーリングされたテキスト編集フィールドに似ており、セルの内容を表示するためのスペースを増やすことができます。5列n行のJTableがあります。列2には任意の長さの式が含まれているため、行ごとに式セルの内容を編集するために使用する別のJTextFieldを提供したいと思います。他のフィールドは、テーブルで直接編集できます。ただし、ユーザーが列2のフィールドをクリックすると、テキストフィールドに送信したいと思います。セルにすでに存在するコンテンツはすべてテキストフィールドに表示され、テキストフィールドでの追加の編集はテーブルセルにミラーリングされる必要があります。同様に、誰かがセルをダブルクリックして直接編集した場合、それらの変更をテキストフィールドに反映させたいと思います。したがって、ユーザーはどちらかのスペースで編集することを選択でき、両方が更新されます。理想的には、キーストロークごとに更新されますが、リターンキーを押したときの更新は許容されます。

これまでのところ、JTable、TableModel、TableModelListener、JTextField、ListSelectionListener、およびAbstractActionが連携して、上記の機能のほとんどを提供しています。テーブルセルの直接編集のテキストフィールドへの反映とキーストークごとの更新がありません。

この振る舞いを構築するための最善の方法についての彼らの考えはありますか?

4

1 に答える 1

2

テーブルからセルデータを取得する場合は、コードを TableModel の setValueAt() 関数に追加します。この関数は、ユーザーが編集可能なセルのコンテンツを変更したときに実行する必要があります。ただし、キーストロークごとに更新されるとは思いません。

テキスト ボックスからテーブル セルにデータを移動する場合は、次のようなコードを使用します

myJTextField.getDocument().addDocumentListener(new MyDocumentListener());

インターフェイスMyDocumentListenerの実装はどこですかjavax.swing.event.DocumentListener

これにより、ボックスからテーブルへのキーストロークごとの更新が取得されます。しかし、逆の場合は少しトリッキーです。

あなたがそれを行うことができるかもしれない2つの方法があります

1) テーブルにキー リスナーを追加し、ユーザーが入力を開始すると、アクティブなテーブル要素を確認し、入力時にキーストロークをインターセプトします。しかし、それはちょっと面倒です。

2) 別のオプションとして、テーブルが使用しているコンポーネントを取得または置換して、実際にユーザーが変更できるようにすることもできます。掘り下げてみると、実際に JTable を使用するとエディター コンポーネントを変更できると思います。

于 2010-01-18T07:42:39.137 に答える