2017-05-17 19 views
0

我在JavaFx中看到了Rectangle的例子。但請任何人提供我在輸出窗口/場景中的例子,如果用戶把理想的寬度和高度,矩形應該自動生成。 這是我的例子如何用輸出中的用戶值生成矩形?

  VBox vb = new VBox(20); 
      HBox h1 = new HBox(7); 
      HBox h2 = new HBox(7); 
      Label lebel1 = new Label("X:"); 
      Label lebel2 = new Label("Y:"); 

      TextField txt1 = new TextField(); 
      TextField txt2 = new TextField(); 

//Converting textfield to integer only  
      ChangeListener<String> forceNumberListener = (observable, oldValue, newValue) -> { 
       if (!newValue.matches("\\d*")) 
        ((StringProperty) observable).set(oldValue); 
      }; 

      txt1.textProperty().addListener(forceNumberListener); 
      txt2.textProperty().addListener(forceNumberListener); 

      double width = Double.parseDouble(txt1.getText()); 
      double height = Double.parseDouble(txt2.getText()); 

      Rectangle rect1 = new Rectangle(); 
      rect1.setHeight(height); 
      rect1.setWidth(width); 
      h1.getChildren().addAll(lebel1, txt1); 
      h2.getChildren().addAll(lebel2, txt2); 

      vb.getChildren().addAll(h1,h2,rect1); 

如果用戶把任何整數值中的「x」爲寬度,「y」的高度,矩形應下面字段來生成。但是這段代碼是錯誤的,我不知道其他方法。請

謝謝你這麼多

回答

1

您應該使用文本域的onkeyreleased事件處理程序。在這個應用程序中,如果兩個TextFields都有一個輸入的數字,則會生成一個矩形。兩個TextField都有一個事件處理程序,如果其中一個文本發生更改,它也會執行相同的操作。這不適用於任何非double值。

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.TextField; 
import javafx.scene.input.KeyEvent; 
import javafx.scene.layout.BorderPane; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBox; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

/** 
* 
* @author blj0011 
*/ 
public class JavaFXApplication104 extends Application 
{ 

    @Override 
    public void start(Stage primaryStage) 
    { 


     BorderPane root = new BorderPane(); 


     VBox vbox = new VBox(); 
     vbox.setMinWidth(100); 

     TextField textfield1 = new TextField(); 
     TextField textfield2 = new TextField(); 

     textfield1.setPrefWidth(50); 
     textfield1.setPromptText("Enter height"); 
     textfield1.setOnKeyReleased(new EventHandler<KeyEvent>(){ 
      @Override 
      public void handle(KeyEvent event) 
      { 
       if(textfield1.getText().length() > 0 && textfield2.getText().length() > 0) 
       { 
        Rectangle rectangle = new Rectangle(); 
        rectangle.setHeight(Double.parseDouble(textfield1.getText())); 
        rectangle.setWidth(Double.parseDouble(textfield2.getText())); 
        rectangle.setFill(Color.BLUE); 
        root.setCenter(rectangle); 
       } 
      } 
     }); 



     textfield2.setPrefWidth(100); 
     textfield2.setPromptText("Enter length"); 
     textfield2.setOnKeyReleased(new EventHandler<KeyEvent>(){ 
      @Override 
      public void handle(KeyEvent event) 
      { 
       if(textfield1.getText().length() > 0 && textfield2.getText().length() > 0) 
       { 
        Rectangle rectangle = new Rectangle(); 
        rectangle.setHeight(Double.parseDouble(textfield1.getText())); 
        rectangle.setWidth(Double.parseDouble(textfield2.getText())); 
        rectangle.setFill(Color.BLUE); 
        root.setCenter(rectangle); 
       } 
      } 
     }); 

     vbox.getChildren().addAll(textfield1, textfield2); 
     root.setLeft(vbox); 

     Scene scene = new Scene(root, 500, 500); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) 
    { 
     launch(args); 
    } 

} 
+0

非常感謝。這將有所幫助。 – Mudasir