2014-04-13 7 views
6

निम्नलिखित कोड में मेरे पास टेक्स्टफ़िल्ल्ड और एक बटन है। टेक्स्टफिल्ड खाली होने पर मुझे बटन को अक्षम करने की आवश्यकता है, ताकि मैं डेटाबेस में रिक्त मान दर्ज करने से बच सकूं। मैं बटन को अक्षम कैसे कर सकता हूं?टेक्स्टफिल्ड खाली होने पर बटन को कैसे अक्षम करें?

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; 

} 

उत्तर

13

अन्य तरीके से बाइंडिंग का उपयोग कर किया जा सकता है:

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); 
+0

यदि आप बटन को तब तक अक्षम करना चाहते हैं जब तक कि सभी टेक्स्टफील्ड भर न जाएं, आपको || & – madmax

+0

की बजाय http://stackoverflow.com/questions/23194183/disabling-button-while-textfields-empty-not-working – madmax

4

उपयोग textProperty() श्रोता के लिए TextField

इस कोशिश ...

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); 
     } 
    }); 
+0

मान लीजिए कि मेरे पास 3 टेक्स्टफिल्ड्स और एक बटन है। तो मुझे उपरोक्त कोड को कैसे संपादित करना चाहिए? – TomJ

+0

@Tom अपडेट करें –

+0

Waht 't1' है? मैं अपने कोड में कहीं भी 't1' का उपयोग नहीं करता और आश्चर्यजनक रूप से यह कोई त्रुटि नहीं दिखाता है। – TomJ

15

Uluk के जवाब की तरह, लेकिन बाइंडिंग धाराप्रवाह एपीआई का उपयोग कर:

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

भी ध्यान रखें कि, Bindings के इस नए अतिभारित विधि JavaFX-8 में जोड़ा जाता है और JavaFX -2 में उपलब्ध नहीं।

+0

अच्छा उत्तर लेकिन आपके पिछले दो बाइंडिंग में पर्याप्त अंत ब्रैकेट हैं। मैंने जवाब संपादित करने की कोशिश की, लेकिन यह मुझे नहीं जाने देगी। – Sedrick

+1

@SedrickJefferson ध्यान देने के लिए धन्यवाद: तय। –

संबंधित मुद्दे