2016-08-29 11 views
0

javafxで初めてのアプリケーションで、簡単な電卓を作ろうとしています。私は簡単な方法でループのためにこれを行うことができます方法を知りたい:簡単な方法でボタンのループを作成するには?

for(int i=1; i<10; i++){ 
    Button bt1 = new Button();  
    bt1.setText("1");  
    bt1.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      System.out.println("1"); 
     } 
    }); 
    i 1; 
} 

そして、どのようにVBoxにこのボタンを取得します。

+2

ボタンを作成するforループが既にあります。それは私にはかなり簡単です。だから私はあなたがここで何を求めているのか分からない。なぜなら、あなたはすでにあなたの答えを持っているように思えるし、(b)それを達成するためのより簡単な方法がないからだ。おそらくあなたが本当に尋ねているのは、あなたの質問の最後の部分です。 "VBox vbox =新しいVBox();'をループの前に書き、 'vbox.getChildren()。add( bt1) 'を返します。 – jewelsea

+0

ありがとう、私は約私が尋ねたものだと思う。しかし、私が走ろうとすると時間がかかりますが、理由はわかりません。 –

+1

実際には瞬間的なものでなければならないので、パフォーマンスの問題が何であるかはわかりません。パフォーマンスの問題をデバッグするのに役立つ必要がある場合は、[mcve](http://stackoverflow.com/help/mcve)を提供する必要があります。誰かが問題を再現するためにアプリケーション全体をコピーして貼り付けるだけです。 – jewelsea

答えて

0

なぜ私はそれに多くの時間がかかるのか分かりません しかし、宝石はそれを行うことで非常に速くすべきだと私は言っています。私はjavafxで作業しています。電卓にあなたは0から9までの数字のための10個のボタンを持っているでしょう、私はそれを理解するように、非常に高性能で、私はこのようにそれをコーディングしたい:小さなと若干の用途のために、これに代わるで

VBox vboxForButtons = new VBox(); 
for(int i=0; i<10; i++){ 
    Button btnNumber = new Button(); 
    btnNumber.setText(String.valueOf(i)); 
    btnNumber.setOnAction((ActionEvent)->{ 
     System.out.println(btnNumber.getText()); 
    }); 
    vboxForButtons.getChildren().add(btnNumber); 
} 

I SceneBuilderツールを使用して、ウィンドウ内でドラッグしたオブジェクトをコード内のFXMLイベントに直接リンクするようアドバイスします。

この回答がお役に立てば幸いです。

+0

ありがとう、私はSceneBuilderを学ぶことができる良い情報源についてお聞きしたいと思います。 –

0

次のコードを使用して実現できます。

 VBox vbox = new VBox(); //create new VBox instance 
     vbox.setMinWidth(500); //set minimum width, dont think you'd need this. 

     for(int i=1; i<10; i++){ 
      Button btn = new Button(); 
      btn.setMinWidth(200); 
      btn.setMinHeight(50); 
      btn.setText("Button" + i);  
      btn.setOnAction(new EventHandler<ActionEvent>() { 
       @Override 
       public void handle(ActionEvent event) { 
        System.out.println(btn.getText()); //Or "1" as in your code 
       } 
      }); 
      vbox.getChildren().add(btn); //add button to your VBox 
     } 

     root.getChildren().add(vbox); //root of your pane 
     primaryStage.setScene(scene); //primaryStage is your stage, scene is the current scene 
     primaryStage.show(); 

編集

パフォーマンスの問題についてのご質問のコメントを読むと、これはそれのいずれかを修正されません。私は基本的に上記で使用したのと同じコードを書いて、VBoxの作成とButtonの追加を追加しました。なぜならVBoxを作成しボタンを追加する必要があったからです。

関連する問題