How to disable Button when TextField is empty?

扶醉桌前 提交于 2019-11-26 09:10:18

问题


In the following code I have a TextField and a Button. I need to disable the Button when ever the TextField is empty, so that I can avoid entering empty values to the database. How can I make the button disabled ?

    private VBox addVBox() {

    VBox vb1 = new VBox();
    vb1.setPadding(new Insets(15, 20, 25, 20));
    vb1.setSpacing(15);
    vb1.setStyle(\"-fx-background-color: #333333;\");

    final Label label = new Label(\"Staff Details\");
    label.setFont(Font.font(\"Arial\", FontWeight.BOLD, 20));
    label.setTextFill(Color.WHITE);

    TableColumn sub = new TableColumn(\"Staff Name\");
    sub.setMinWidth(400);
    sub.setCellValueFactory(
            new PropertyValueFactory<Staff, String>(\"subName\"));

    table.setItems(data);
    table.getColumns().addAll(sub);

    addSubName = new TextField();
    addSubName.setPromptText(\"Staff Name\");
    addSubName.setPrefSize(200, 30);

    final Button b2 = new Button(\"Add\");
    b2.setFont(Font.font(\"Calibri\", FontWeight.BOLD, 17));
    b2.setPrefSize(70, 30);
    b2.setStyle(\" -fx-base: #0066ff;\");
    b2.setTextFill(Color.BLACK);

     b2.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent e) {

            msg = addSubName.getText();
            try {
                enterStaff();
            } catch ( ClassNotFoundException | SQLException ex) {
                Logger.getLogger(AddStaff.class.getName()).log(Level.SEVERE, null, ex);
            }

            data.add(new Staff(addSubName.getText()));
            addSubName.clear();
            }
     });

    hb.getChildren().addAll(addSubName, b2);
    hb.setSpacing(5);

    vb1.getChildren().addAll(label, table, hb);
    return vb1;

}

回答1:


The other way can be using bindings:

final TextField textField1 = new TextField();
final TextField textField2 = new TextField();
final TextField textField3 = new TextField();

BooleanBinding bb = new BooleanBinding() {
    {
        super.bind(textField1.textProperty(),
                textField2.textProperty(),
                textField3.textProperty());
    }

    @Override
    protected boolean computeValue() {
        return (textField1.getText().isEmpty()
                && textField2.getText().isEmpty()
                && textField3.getText().isEmpty());
    }
};

Button btn = new Button("Button");
btn.disableProperty().bind(bb);

VBox vBox = new VBox();
vBox.getChildren().addAll(textField1, textField2, textField3, btn);



回答2:


Similar to Uluk's answer, but using the Bindings fluent API:

btn.disableProperty().bind(
    Bindings.isEmpty(textField1.textProperty())
    .and(Bindings.isEmpty(textField2.textProperty()))
    .and(Bindings.isEmpty(textField3.textProperty()))
);

Also note that, this new overloaded method of Bindings is added in JavaFX-8 and not avaliable in JavaFX-2.




回答3:


use textProperty() Listener for TextField

try this...

Button b1 = new Button("DELETE");
b1.setFont(Font.font("Calibri", FontWeight.BOLD, 17));
b1.setPrefSize(100, 30);
b1.setStyle(" -fx-base: #ffffff;");
b1.setTextFill(Color.BLACK);

b1.setDisable(true); // Initally text box was empty so button was disable

txt1.textProperty().addListener(new ChangeListener<String>() {

        @Override
        public void changed(ObservableValue<? extends String> ov, String t, String t1) {
            //System.out.println(t+"====="+t1);
           if(t1.equals(""))
               b1.setDisable(true);
           else
               b1.setDisable(false);
        }
    });


来源:https://stackoverflow.com/questions/23040531/how-to-disable-button-when-textfield-is-empty

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!