問題タブ [beans-binding]
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 - Swing コンポーネントを Java オブジェクトにバインドする
私は現在、Swing を使用して Java のデスクトップ アプリケーションに取り組んでいます。jdesktop.org の beanbinding フレームワークを使用して、GUI コンポーネントとデータ オブジェクトの状態を同期しています。しかし、フレームワークで問題が発生しており、GUI コンポーネントとデータ オブジェクトの間で状態情報を手動でやり取りする必要があります。
BeanBinding フレームワーク (NetBeans でも使用されていると思いますか?) に代わるものはありますか? 推奨できる戦略はありますか (バインディングをまったく使用しない、代わりに何をすべきかなど)?
BeanBinding で私が直面している問題について知りたい場合は、次のようにします。
- JTables内のTableModelを置き換えます(そのため、独自の行を使用したり、行を削除したりすることはできません)
- selectedItem や selectedObject など、特定のプロパティにアクセスできない、または使用できない (少なくとも JComboBox、JList などで一貫して)。
- 特定のプロパティは、読み取り専用または書き込み専用です (selectedItem や selectedObject など)。
- 値 null に特別な値をバインドすることはできますが、たとえば、カスタム マッピング関数などを使用してリスト内の数値を JComboBox 内の文字列にマップすることはできません (適切な toString メソッドを使用して特別なクラスを作成できることはわかっていますが、ただし、これにより、データセット用に特別なラッパー オブジェクトを作成する必要があります)
- ...
java - キャンセルボタンを押すと、SwingDataBindingのロールバックが変更されます
いくつかのjtextfieldが内部にある単純なJFrameがあり、各jtextfieldのtextプロパティは、データバインディング(ウィンドウビルダーを使用してバインディングを設定)を介してオブジェクトのフィールドにバインドされます。ユーザーがJTextFieldで何かを変更すると、変更が自動的に反映されます。バインドされたオブジェクトプロパティに対して、ユーザーがJButton(キャンセルボタン)を押すと、ユーザーが行ったすべての変更が破棄される必要があります。
したがって、ユーザーがトランザクションのようにフィールドの編集を開始すると、トランザクションが開始され、ユーザーのアクション([OK]または[キャンセル]ボタン)に応じて、トランザクションがコミットまたはロールバックされるようにします。
Swingデータバインディングフレームワークで可能ですか?どのように ?
ここにデータバインディングを初期化するコードがあります:
java - org.jdesktop.swingbinding.JTableBinding$BindingTableModel は javax.swing.table.DefaultTableModel にキャストできません
JTable ヘッダーをグループ化しようとしましたが、そのために現在の JTable の DefaultTableModel を取得したいと考えています。しかし、次のようにテーブルモデルを取得しようとしたとき:
次の例外が表示されます。
org.jdesktop.swingbinding.JTableBinding$BindingTableModel は javax.swing.table.DefaultTableModel にキャストできません
JTableBeansBinding を使用しているためです。
この問題を解決する方法を知っている人はいますか (DefaultTableModel を取得するため)。
java - Metawidgetを使用してGUIの値とオブジェクトを同期する
Metawidgetを使用して、GUIのオブジェクトの値を自動的に表示/編集しています。オブジェクトの初期値をバインドして、それぞれのGUIコンポーネントで確認することができます。ただし、GUIで値を変更すると、これらの変更はオブジェクトに同期されません。これは多かれ少なかれここ(非推奨)とここに文書化されています。
これが私のビジネスオブジェクトです。
これが私の主な方法で、metawidgetが構成されています。
ドキュメントでは、次のように述べられています。
READまたはREAD_WRITE(デフォルトはREAD_ONCE)に設定されている場合、検査されるオブジェクトはPropertyChangeSupportを提供する必要があります。READ_WRITEに設定されている場合、UIの更新は自動的にsetToInspectに同期されます。そうでない場合、クライアントは手動でsaveを呼び出す必要があります。
myMetawidget.getWidgetProcessor(BeansBindingProcessor.class).save(myMetawidget)
UpdateStrategyをREADおよび/またはREAD_WRITEに設定するか、 BeansBindingProcessorでsave()を呼び出してみました。また、PersonオブジェクトにPropertyChangeSupportを提供しようとしました(これを参照していると思います)。これは、次のコードを追加するのと同じです。
ただし、Personオブジェクトは常に元の値を維持します。
前もって感謝します。
java - ClassCastException Beansbinding Java
ClassCastException
ここで例外が発生する理由を教えてください。
これはテキストフィールドです:
Apprentice.javaには、ゲッターとセッターを含むプライベートフィールドである属性「vorname」(名のドイツ語)があります。
java - 更新後に JTable をリフレッシュする
これは、私が直面している問題の簡単な例です。
私は単純なクラスを持っています:
a と b の合計である C というプロパティがあることに注意してください。
次に、これを次のように JTable にバインドします。
次に、次のコードを使用して、テスト オブジェクトの各プロパティ a、b、および c のバインディングを追加します。(これは私が使用する単なる一般的なコードであることに注意してください)
これでテーブルが正しく表示されますが、テーブルの a または b を更新すると問題が発生します。c は a と b から計算されるため、これらの値のいずれかが変更されたときに c が更新されることを期待しています。これは起こりません。
エンティティの新しい値を反映するには、テーブルを更新する必要があると思いますか?
これを実現するために私が何をする必要があるかを誰かが説明できますか? 追加の Bean バインディング プロパティを追加する必要がありますか?
私が使用しているBeanバインディングライブラリは次のとおりです。
java - Java BeansBinding JButton.enabled
Netbeans 7.3 で jdesktop の beanbinding ライブラリを使用しています。本当に具体的な質問があります。別の Bean のいずれかのプロパティが null でない場合は JButton を有効にし、null の場合は無効にしたいと考えています。
そこで、ELBinding を作成しようとしました (これには${myProperty > 50}
、この式が true かどうかを保持するブール値を返すなどの条件付きサポートがあります。
しかし、私の場合、この状態を書き留める方法がわかりません(インターネットでも見つけられません)。プロパティ変更のイベント リスナーがあれば、次のように記述します (PropertyChangeListener インスタンスの抽象メソッド内)。
ELProperties の文書化が不十分なため、ヒントをありがとうございます。
java - Bean バインディングを使用して jTable を検索する
Beans Binding を使用してデータベースからのデータが取り込まれる jTable があります。テーブルの検索機能を実装したい。Bean バインディングを使用してこれを実現する次のチュートリアルに出くわしました。
https://weblogs.java.net/blog/pkeegan/archive/2008/06/using_beans_bin.html
私はそれを機能させることができません。作成したサンプル アプリケーションを実行すると、検索テキスト フィールドに「javax.swing.table.TableRowSorter@16994fe8」などの予期しない値が表示されます。これは実際には、TableRowSorter オブジェクトを文字列に変換するコンバーター クラスの convertForward() メソッドから来ています。テキスト フィールドに何かを入力しても何も起こりません。
jTable の autoCreateRowSorter プロパティを true に設定しました。テーブルはデフォルトのテーブル モデルを使用した Bean バインディングを使用して設定されるため、カスタム テーブル モデルは使用していません。
コンバーター クラスの getTable()、setTable()、または convertReverse() メソッドが呼び出されないことに注意してください。その過程で何かを逃したかどうか疑問に思っています。
以下は、検索テキストフィールドをjTableにバインドするために使用しているコードです。
この点でどんな助けでも大歓迎です。
java - JTable Binding - 編集できないエンティティの一時フィールドにバインドされた JTable 列
jpaを使用してjtableBindingを介してDBにバインドされたフォーム(Jpanel)にjtableがあります。(netbeans を介して自動生成)
エンティティ クラスの対応するフィールドを @transient にすることで、jtable にチェック ボックスを追加しました。DBテーブルのこのチェックボックスの列は必要ありません。
私が今直面している問題は、チェック ボックスが編集できないことです。
私のエンティティクラス
.
生成された UI コード