Richtige Art und Weise zu binden, der radio-button Gruppe mit JFace data binding
Ich Frage mich, wenn jemand könnte mir erklären, wie ich konnte richtig binden, eine Gruppe von radio-buttons, um eine Boolesche variable, die im Modell Verwendung von JFace data binding.
Lassen Sie mich erklären, die situation zuerst: ich habe eine Klasse repräsentiert eine Gruppe von SWT-buttons (mit dem Stil 'SWT.RADIO') , besteht aus drei Elementen: Ein label mit der Frage und zwei buttons, einer für "ja" zu beantworten und eine für "Nein". Ich möchte erstellen Sie eine Bindung an eine Boolesche variable in das Modell in der Weise, dass, wenn ein Benutzer wählt "ja" radio-button der boolean auf true gesetzt ist, und wenn er/Sie wählt die Schaltfläche "Nein", die boolean auf false gesetzt ist.
Hier ist der code meiner Klasse:
private class YesOrNoRadioButtonGroup {
private static final String YES = "yes";
private static final String NO = "no";
private Button m_yesButton;
private Button m_noButton;
public YesOrNoRadioButtonGroup(final Composite p_parent,
final String p_questionText,
final IObservableValue p_modelProperty
final DataBindingContext p_dbContext)
{
Composite radioButtonGroupContainer = new Composite(p_parent, SWT.NONE);
radioButtonGroupContainer.setLayout(new GridLayout());
Label question = new Label(radioButtonGroupContainer, SWT.NONE);
question.setText(p_questionText);
m_yesButton = new Button(radioButtonGroupContainer, SWT.RADIO);
m_yesButton.setText(YES);
m_noButton = new Button(radioButtonGroupContainer, SWT.RADIO);
m_noButton.setText(NO);
m_noButton.setSelection(true);
Listener yesOrNoRadioGroupListener = new Listener() {
public void handleEvent(Event p_event) {
Button button = (Button) p_event.widget;
if (m_yesButton.equals(button)) {
m_yesButton.setSelection(true);
m_noButton.setSelection(false);
}
else {
m_yesButton.setSelection(false);
m_noButton.setSelection(true);
}
}
};
m_yesButton.addListener(SWT.Selection, yesOrNoRadioGroupListener);
m_noButton.addListener(SWT.Selection, yesOrNoRadioGroupListener);
p_dbContext.bindValue(SWTObservables.observeSelection(this.getYesButton()),
p_modelProperty, null, null);
}
public Button getYesButton() {
return m_yesButton;
}
public Button getNoButton() {
return m_noButton;
}
}
Nun, wie Sie sehen können, bin ich verbindlich meine "ja" - Taste, um die boolean-Wert. Insbesondere wird der Wert gebunden an die SWT.Auswahl Veranstaltung. Dies ist, so scheint es, die einzige gültige-Ereignis für die Bindung von einem radio-button. Jedoch, weil dieser, sobald der "Nein" - button ausgewählt ist, wird der Wert des booleschen unverändert bleibt (da kein SWT.Auswahl-event auf die Schaltfläche "ja" gefeuert wurde).
Was kann ich tun, um diese so funktionieren, wie es soll, d.h. in der Lage sein, ändern Sie den Wert von der boolean in ein Modell basierend auf dem von den Schaltflächen wird der Benutzer wählt?
Übersehe ich etwas offensichtliches hier?
Danke!
InformationsquelleAutor Sandman | 2009-03-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheint es ähnlich zu Bindung an ein POJO zu einer Eigenschaft.
Das bedeutet, dass Sie eine haben sollte-Objekt mit zwei Tasten, die die Umsetzung einer IObservable, und dann binden Sie es zu Ihrem Eigentum.
Wie Sie erwähnen, in den Kommentaren, sollten Sie verlängern AbstractObservable.
Haben Sie ein Beispiel für eine solche Erweiterung hier mit dieser Test-Klasse über eine beobachtbare Liste (nicht notwendig, was Sie brauchen, aber es kann Ihnen Ideen über die Nutzung der Beobachtbaren, wenn es darum geht zu erkennen, die die Veränderung auf-Meldung)
Ich denke SeB.Fr noch mehr elegante und einfachere Lösung mit der SelectObservableValue.
Ich bin damit einverstanden, und haben von Ihnen positiv bewertet werden, dass die post.
InformationsquelleAutor VonC
Ich glaube, ich fand die meisten entsprechenden Implementierung für diese.
Sie müssen verwenden Sie die org.eclipse.core.databinding.beobachtbar ist.Wert.SelectObservableValue.
hier ist der code
Dies funktioniert natürlich für alle Art von enums oder andere Art der wählbaren Werte. Man könnte natürlich, verwenden Sie String JA und NEIN, aber ich bevorzuge enums
InformationsquelleAutor SeB.Fr
Wenn verwenden Sie die Nebel RadioGroup Kontrolle, die Sie verwenden können, RadioGroupViewer und binden Sie den viewer-Auswahl wie jeder andere viewer z.B. ComboViewer
InformationsquelleAutor qualidafial
Den radio-buttons in der gleichen composite-als eine Gruppe, also nur eine Taste den Wert true, und alle anderen haben einen falschen Wert. Zusammen mit dieser Tatsache, die observeSelection auf die Schaltfläche " ja " sollte ausreichend genug sein, um entsprechend der ausgewählten Wert yes oder no, an der Modell-Eigenschaft Seite.
Oder in anderen Worten, der modifizierte Konstruktor würde wie folgt Aussehen.
Ich versuchte dies und fand gut zu funktionieren. Nur check-out.
InformationsquelleAutor
Dies ist, was ich landete mit beim zuordnen von radio-buttons enum (ich werde gehen und machen es wiederverwendbar für unser Projekt) - mit ISWTObservableValue spart den Aufwand der addition der Hörer:
InformationsquelleAutor Eugene
Diese Arbeit sollte mit wenig bis gar keine Mühe, und wir alle wissen, das ist die beste Art von Antwort richtig?
InformationsquelleAutor Mostafa Zeinali