17

JavaFx FXML アプリケーションに問題があります。

フォームのチェックボックスを選択すると、クリックされたチェックボックスに基づいてメソッドを実行したい。チェックボックスの名前をメソッドに渡して、条件付きの作業を実行できる方法はありますか?

チェックボックスが 2 つあり、選択できるのは 1 つだけです。一方をクリックすると、もう一方は選択解除され、その逆も同様です。明らかに、以下のコードは機能しないため、クリックされたオブジェクトの名前を渡したいと考えています。

どんな助けでも大歓迎です、どうもありがとう。

@FXML private void updateRcs(){

    if (chkRcsuri.isSelected()){
        chkRcsuri2.setSelected(false);
    }

    if (chkRcsuri2.isSelected()){
        chkRcsuri.setSelected(false);
    }

}
4

5 に答える 5

33

変更追跡を使用するか、JavaFX のイベ​​ント処理メカニズムを使用できます。
このようなチェックボックスで、

final CheckBox chk1 = new CheckBox("chk 1");
final CheckBox chk2 = new CheckBox("chk 2");

変更追跡

chk1.selectedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        chk2.setSelected(!newValue);
    }
});

chk2.selectedProperty().addListener(new ChangeListener<Boolean>() {
    @Override
    public void changed(ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) {
        chk1.setSelected(!newValue);
    }
});

イベント処理の使用

EventHandler eh = new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent event) {
        if (event.getSource() instanceof CheckBox) {
            CheckBox chk = (CheckBox) event.getSource();
            System.out.println("Action performed on checkbox " + chk.getText());
            if ("chk 1".equals(chk.getText())) {
                chk2.setSelected(!chk1.isSelected());
            } else if ("chk 2".equals(chk.getText())) {
                chk1.setSelected(!chk2.isSelected());
            }
        }
    }
};

chk1.setOnAction(eh);
chk2.setOnAction(eh);
于 2012-12-05T17:58:58.607 に答える
1

これが私の解決策です。ただし、a変数が適切であることを確認してください

//First in FXML file 
<CheckBox fx:id="chkbxAuto" mnemonicParsing="false" onAction="#autoConfig" text="Auto" />

// in controler  
public class FXMLController implements Initializable {
    private static int a = 0;
    //references to lables
    ....
    @FXML
    private Label lblStateValue; 
    @FXML
    private Group grpSetting; // a group of elements which I want to be disabled and enabled 
    ... 
    @FXML
    private void autoConfig(ActionEvent event) {
            System.out.println("Configing automatically"); 
             a++;
             if(a%2==1){
                 lblStateValue.setText("Auto configuration enabled"); // it change a lable to show the state 
                 grpSetting.setDisable(true); // it disable a group of elements
             }
            else{
                 lblStateValue.setText("Auto configuration disabled");
                 grpSetting.setDisable(false);
             }
            a%=10;

        }
    ...
于 2017-04-02T22:27:15.150 に答える
0

この質問はかなり古いことは知っていますが、同じ問題を探しているときに見つけました。私は解決策を見つけました

a)ソースコードの読み取りと

b) checkBox で changeListener を定義すると、いくつかの問題が発生しました。

とにかく私の解決策は、チェックボックスの onAction 関数を定義することでした。

yourCheckboxName.setOnAction(this::aFunctionName);
...
void aFunctionName() {

    if(yourCheckboxName.isSelected()) {            
        doThis()
    } else {
        doThat()
    }
}

注意これには Java8 以上が必要です。

于 2018-09-12T06:48:18.193 に答える