Tôi tự hỏi liệu có ai có thể giải thích cho tôi cách tôi có thể ràng buộc một nhóm nút radio thành biến boolean trong mô hình bằng cách sử dụng liên kết dữ liệu JFace hay không.Cách thích hợp để ràng buộc nhóm nút radio bằng cách sử dụng liên kết dữ liệu JFace
Để tôi giải thích tình huống trước: Tôi đã tạo một lớp đại diện cho một nhóm nút SWT (với kiểu được đặt thành 'SWT.RADIO') bao gồm ba phần tử: Nhãn có câu hỏi và hai nút , một cho câu trả lời "có" và một cho "không". Tôi muốn tạo một ràng buộc với biến boolean trong mô hình theo cách mà khi người dùng chọn nút radio "có", boolean được đặt thành true và khi người đó chọn nút "no" thì boolean là đặt thành false.
Dưới đây là đoạn code của lớp học của tôi:
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;
}
}
Bây giờ, như bạn có thể thấy, tôi đang ràng buộc nút "yes" của tôi vào boolean. Cụ thể, giá trị sẽ được ràng buộc trong sự kiện SWT.selection. Đây là, có vẻ như, sự kiện hợp lệ duy nhất cho sự ràng buộc của một nút radio. Tuy nhiên, vì điều này, một khi nút "no" được chọn, giá trị của boolean vẫn không thay đổi (vì không có sự kiện SWT.selection nào trên nút "yes" được kích hoạt).
Tôi có thể làm gì để thực hiện công việc này theo cách của nó, tức là để có thể thay đổi giá trị của boolean trong mô hình dựa trên các nút mà người dùng chọn? Tôi có thiếu điều gì đó hiển nhiên ở đây không? Cảm ơn!
Hmmm ... có, đây có vẻ là cách thanh lịch nhất để giải quyết vấn đề này. Tnx cho câu trả lời, tôi sẽ chấp nhận nó nếu không ai đến với bất cứ điều gì tốt hơn. Btw, có vẻ như tôi có lẽ nên mở rộng AbstractObservable thay vì thực hiện IObservable trực tiếp. – Sandman
Tôi nghĩ rằng SeB.Fr cung cấp giải pháp thậm chí thanh lịch hơn và đơn giản hơn bằng cách sử dụng SelectObservableValue. – janhink
@eQui Tôi đồng ý và đã bỏ phiếu cho bài đăng đó. – VonC