問題タブ [tablecelleditor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - エラー ダイアログが破棄されない
私は、特に日付の列を表示するために JTable を使用しているプロジェクトに取り組んでいます。日付のユーザー入力の検証が必要だったので、フォーマット検証用のマスキングと実際の日付検証用の解析の組み合わせを実装しました。日付列のカスタム CellEditor を使用してこれを行いました。
MaskedCellEditor 内に、JFormattedTextField があります。日付のマスキングをセットアップします。次に、実際の検証を可能にするために InputVerifier を追加します。私の InputVerifier は、チェックするために verify() を実装しています: 1. textField.isEditValid() 2. DateValidator.ValidDate(). いずれかが無効な場合、verify は false を返し、InputVerifier はフォーカスをテキスト フィールド (セル エディター) に固定し、ユーザーに日付形式を知らせる小さなメッセージ ダイアログを表示します。
エラー メッセージは、編集中のセルの下にポップアップ表示される、小さな装飾のない、非モーダルでフォーカス不可能な JDialog です。キーを押すか、日付の検証に成功すると消えます。小さなエッジケースを除いて、うまく機能しています。
無効な編集によってダイアログがポップアップしているときに、ユーザーがアプリケーションの上部にあるメニュー ボタンを選択すると、画面が切り替わり、現在画面に表示されているすべてのもの (テーブルを含む) が破棄されます。ただし、ダイアログが表示されていて、キーの押下/編集の成功が発生していないため、ダイアログが非表示になることはありません。別の画面では、まったく関係のないコンテキストで表示されたままになります。ユーザーがテーブルで画面をオフにすると、ユーザーがダイアログを取り除く方法はありません。
ダイアログ自体に Timer および/または MouseListener をスローして、ダイアログ自体を非表示にすることについて議論しましたが、実際の問題を無視していると感じています。ダイアログがまだ表示されるように設定されており、ガベージコレクターがそれを取り除くのを妨げているため、ダイアログが破棄されることはありません。
JTable を保持しているパネルに Cleanup メソッドがありますが、それを取り除くためにダイアログ (InputVerifier のコンポーネント) を参照する良い方法が見つかりません。ダイアログは、テーブルの親パネルからかなり離れています。(パネル -> JTable -> CellEditor -> JFormattedTextField -> InputVerifier -> JDialog)
テーブルが破棄されたときにダイアログを強制的に非表示にする方法についてのアイデアはありますか? 詳細が必要な場合は、お知らせください。皆さんが詳細に行き詰まらないようにしていますが、多くのことが進行中です。
java - TableCellEditor オブジェクトの再利用
だから私はたくさんのテーブルとたくさんのセルエディタを持っていて、それらにはたくさんのものがあります。すべてが getTableCellEditorComponent() に設定されているため、毎回 new() を実行するのではなく、それらを再利用する必要があると考えましたが、それでも、ほぼ毎回実行しようとすると、古いセルに「残り物」が表示され、その他の奇妙なことが起こります。通常、毎回新しい問題を作成するだけで問題を解決できますが、これは悪いことですか?
ありがとう!ジョシュア
java - JTable セルを編集可能にする - ただし、ダブルクリックでは*できません*
次の動作で列を に追加しようとしてJTable
います (Windows エクスプローラーや同様のシェルに似ています)。
- 通常どおり、セルを 1 回クリックして選択できます。
- セルをダブルクリックして、別のアクション (外部プログラムの起動) を実行できます。
- セルの値 (文字列) は、(一時停止した後に) もう一度シングルクリックするかF2、セルが強調表示されているときに を押すことで編集できます。
ダブルクリックによってセルの編集がトリガーされてはなりませんが、可能であれば他のデフォルトの編集トリガーを操作できるようにしたいと考えています。
テーブルにa を追加しMouseListener
て、すべての s を消費しようとしましたMouseEvent
が、これは機能しません。それtrue
から戻ったisCellEditable()
場合、リスナーはクリック イベントを受け取りませんが、戻った場合はfalse
機能しF2なくなります。
イベントリスナーのみを使用してこれを実現できますか? PLAF関数をいじらないようにしたいです。
java - Java Swing:TreeListeners:valueChangedの前にstopCellEditing()を呼び出す方法は?
これは、これらの以前の質問に対するフォローアップです。
- 別のJBttonが押されたときにDefaultCellEditorで編集を停止する方法
- Sun Bug 4724980: JTable: テーブルがフォーカスを失ったときに編集に何が起こるかを制御する API を追加します。
以下のようにプロパティを使用するとterminateEditOnFocusLost
、テーブルがフォーカスを失ったときに CellEditor が正しく編集を停止します。
私のJButtonでも動作します。ボタンを押すアクションが処理される前にstopCellEditing()
、TableCellEditor に対してメソッドが呼び出されます。しかし、JTree で使用すると、ツリーの選択が変更され、メソッドがbeforeで呼び出されます。TreeSelectionListener.valueChanged
stopCellEditing()
最初に強制的に呼び出す方法があるかどうかstopCellEditing()
、またはこの問題の回避策を講じる必要があるかどうかは誰にもわかりませんか?
java - カスタム セル エディタでの選択時にセルが奇妙な点滅をする
私は JTables を使用するのが初めてで、カスタム JTable エディターを適切に動作させるのに問題があります。
リストとボタンを備えた多数のカスタム パネルがあります。それらをセルにレンダリングするために、パネルのタイプごとにさまざまなコンストラクターを持つカスタム PanelCellRenderer を使用しています。
ボタンをクリックできるようにするために、DefaultCellEditor を拡張するこの単純な PanelCellEditor を作成しました。編集時にセル内に格納されたデータにアクセスするには、参照を PanelCellRenderer に渡します。
私が抱えている問題は、セルをクリックして選択すると、ボタンでリストを表示すると、選択したセルが完全に空白になることです。セルの選択が解除されると、データを含むリストとボタンが再び表示されます。これに関するアドバイスは役に立ちます。ありがとう。
java - JTable Cell の編集開始時にすべてのデータを選択
Excelのように機能する表を作成しようとしています。つまり、ユーザーがセルにデータを挿入し始めると、セルの内容が選択され、挿入された新しいデータによって変更されます。
java - JTable でセルを編集するときに追加の動作を提供する
Javaでアプリを作成しています。JTable のセルを編集するときに追加の動作を提供する必要があります。したがって、理想的には、編集後にセルがフォーカスを失ったときにこれが発生します。後処理によっては、セルの値をリセットする場合があります。セル エディタを使用してみましたが、望ましい動作が得られません。
デフォルトの JTable では、セルをダブルクリックすると編集可能になります。しかし、CellEditor の私の実装では、セルがフォーカスされるとすぐに編集可能になります。
My カスタム CellEditor のコードは次のとおりです。
どんな助けでも大歓迎です。ありがとう。
java - JTableの相互に排他的なCellEditors
現在、JTableの1つのセルの内容を編集すると、別のセルの内容が変更されるという問題があります。2つの列は相互に排他的です。どちらもチェックボックスです。
現時点では、一方のセルを変更すると、もう一方のセルが再描画されるまで更新されません。したがって、行の両方のセルを一度に選択されたものとして表示できます。これはupdateUI()を呼び出すことで解決できますが、速度が遅く、一般的には優れたアイデアではありません。
誰かが何かヒントや提案がありますか?
swing - JComboBoxエディターを使用したJTable:キーボードから1回のキーを押すだけでセル値を編集することは可能ですか?
JComboBoxエディターを含むJTableを次のように初期化しています
これは他の点では問題なく機能していますが、テーブル内を移動して、キーボードのみで値を更新できるようにしたいと思います。これはコンボボックスで可能ですが、値「1」を更新する場合は、最初にキーを押してコンボボックスをアクティブにし、次に「1」を押して項目を選択する必要があります。
だから、私が欲しいのは、「1」を押すことができ、1回のキーを押すだけでアイテムが選択されることです。
テキストセルの場合、次のようにprepareEditorでこれを行うことができました...
...しかし、私はコンボボックスをどうするかを理解することができませんでした。
1つの可能性は独自のTableCellEditorである可能性がありますが、もっと簡単な解決策があればいいでしょう=)
br、トウコ