5

C#でこれを行うことができるように、Javaでデータバインディングを作成することは可能でしょうか?たくさんググったが、答えはない。
たとえば、コレクションをJtableにバインドし、コレクション内のいくつかの要素を追加、削除、または変更したときにJTableが更新されるようにしたい。

前もって感謝します!

4

4 に答える 4

2

はい、JavaBeansバインディングがあります。

を見てみましょう:

  1. NetBeansBeansBindingチュートリアル
  2. BBに関するScottVioletのブログエントリ

JTableの例として、観察可能なコレクションがあります。例:

ObservableList<Employee> employees =
    ObservableCollections.observableList(
    new ArrayList<Employee>());

記事「BeansBinding:深刻な問題を抱えたJavaデータバインディングソリューション」から引用。

于 2012-05-05T09:03:20.563 に答える
1

質問が一般的なJavaGUIに関するものである場合、JavaFX2はネイティブでバインディングをサポートします。
特にSwing(JTableの例)については、解決策もあるようですが、私はそれらに精通していません。

于 2012-05-05T08:57:28.797 に答える
0

調査の結果、カスタムモデルを使用するよりも良い方法はないことがわかりました。このブログでは、完璧なテーブルモデルを見つけることができます。

于 2012-05-14T06:45:27.440 に答える
0

(コードが含まれているため、コメントではなく完全な回答として回答しています)遅れているかもしれませんが、BBBを使用した小さな例を求められたので、役立つと思われるコードを次に示します。

public static final Property<PatientModel, Long> PATIENT_MODEL_PATIENT_ID_PROPERTY_OBJECT =
        BeanProperty.create(Patient.PATIENT_ID_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_FIRST_NAME_PROPERTY_OBJECT =
        BeanProperty.create(Patient.FIRST_NAME_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_MIDDLE_NAME_PROPERTY_OBJECT =
        BeanProperty.create(Patient.MIDDLE_NAME_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_SURNAME_PROPERTY_OBJECT =
        BeanProperty.create(Patient.SURNAME_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_SECOND_SURNAME_PROPERTY_OBJECT =
        BeanProperty.create(Patient.SECOND_SURNAME_PROPERTY);
public static final Property<PatientModel, Sex> PATIENT_MODEL_SEX_PROPERTY_OBJECT =
        BeanProperty.create(Patient.SEX_PROPERTY);
public static final Property<PatientModel, String> PATIENT_MODEL_BIRTH_PLACE_PROPERTY_OBJECT =
        BeanProperty.create(Patient.BIRTH_PLACE_PROPERTY);
public static final Property<PatientModel, Calendrical> PATIENT_MODEL_BIRTH_DATE_PROPERTY_OBJECT =
        BeanProperty.create(Patient.BIRTH_DATE_PROPERTY);
public static final Property<PatientModel, Period> PATIENT_MODEL_AGE_PROPERTY_OBJECT =
        BeanProperty.create(Patient.AGE_PROPERTY);

(...)

    private ObservableList<PatientModel> model;
    private JTable selectionTable;

(...)

    JTableBinding<PatientModel, List<PatientModel>, JTable> selectionTableBinding
            = SwingBindings.createJTableBinding(UpdateStrategy.READ_WRITE, this.model, this.selectionTable);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_PATIENT_ID_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_FIRST_NAME_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_SURNAME_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_SEX_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_BIRTH_PLACE_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_BIRTH_DATE_PROPERTY_OBJECT);
        selectionTableBinding.addColumnBinding(PATIENT_MODEL_AGE_PROPERTY_OBJECT);

私の経験から、学習は、一度学習すると途方もなく簡単に実装できるようになるのと同じくらい大変です。ドキュメントが優れていないことは知っていますが、http://www.jarvana.com/jarvana/view/it/tidalwave/betterbeansbinding/betterbeansbinding-swingbinding/1.3.0/betterbeansbinding-swingbinding-1.3.0-javadocをご覧ください。 jar!/org/jdesktop/swingbinding/JTableBinding.htmlといくつかの自己学習の例を実行することで、膨大な時間の無駄を省くことができました。BBBとは別に、私が個人的に試したことのないJGoodiesBindingsもあります。

于 2013-02-27T18:29:43.060 に答える