2017-05-17 14 views
0

JavaFxでRectangleの例を見てきました。しかし、誰でもできます私は出力ウィンドウ/シーンでは、ユーザーが望ましい幅と高さを置く場合、矩形が自動的に生成する必要があります私に例を提供してください。ユーザーは高さ、幅として「X」で「Y」を任意の整数値を入れた場合は、ここで が出力でユーザー値を使用して矩形を生成する方法は?

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

私の例で、長方形のフィールドの下に生成されなければなりません。このコードは間違っていて、私は他の方法を知らない。

はあなたに

答えて

1

あなたは、TextFieldのonkeyreleasedイベントハンドラを使用する必要がありますそんなに感謝してください。このアプリでは、両方のTextFieldに数値が入力されている場合、長方形が生成されます。両方のTextFieldには、テキストの1つが変更された場合に同じことをするイベントハンドラがあります。これは、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

関連する問題