2015-04-07 21 views
2

試圖儘可能清楚這個程序應該顯示4張隨機選擇的卡,然後在它們下面有一個按鈕,從一個按鈕隨機重置所有卡然而,我對在行動事件中如何去做這件事感到困惑。 (也作爲一個額外的獎勵,我似乎不能讓按鈕顯示在卡片下方,而只是最終將整個屏幕從卡片和按鈕上移開)任何幫助都會感激不盡。如何更改javafx中的圖像與按鈕

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.scene.layout.Pane; 
import javafx.scene.layout.HBox; 
import javafx.stage.Stage; 
import javafx.scene.control.Button; 
import javafx.event.EventHandler; 
import javafx.geometry.Pos; 
import javafx.scene.layout.GridPane; 
import javafx.event.ActionEvent; 

public class GenerateCards extends Application { 

    public static void main(String[] args) { 
    Application.launch(args); 

    } 
public int cardNum(){ 
    int Num = (int) Math.ceil(Math.random()*52); 
    return Num; 
} 
    public void start(Stage primaryStage) { 

     primaryStage.setTitle("Random Card"); 

       GridPane pane = new GridPane(); 
       pane.setAlignment(Pos.CENTER); 
       pane.setHgap(10); 
       pane.setVgap(5); 

       // creates button 
       Button refresh = new Button("Refresh"); 
       HBox button = new HBox(10); 
       button.setAlignment(Pos.BOTTOM_CENTER); 
       button.getChildren().add(refresh); 
       pane.getChildren().add(refresh); 

       // creates random card images and adds them to pane 
       Image img = new Image("card/"+cardNum()+".png"); 
       ImageView imgView = new ImageView(img); 
       pane.add(imgView, 1, 0); 

       Image img2= new Image("card/"+cardNum()+".png"); 
       ImageView imgView2 = new ImageView(img2); 
       pane.add(imgView2, 2, 0); 

       Image img3= new Image("card/"+cardNum()+".png"); 
       ImageView imgView3 = new ImageView(img3); 
       pane.add(imgView3, 3, 0); 

       Image img4= new Image("card/"+cardNum()+".png"); 
       ImageView imgView4 = new ImageView(img4); 
       pane.add(imgView4,4, 0); 
       //create scene 
       Scene scene = new Scene(pane,400,200); 
       primaryStage.setScene(scene); 
       primaryStage.show(); 
       refresh.setOnAction(new EventHandler<ActionEvent>() { 
         public void handle(ActionEvent e){ 
         // where im confused 
         } 
       }); 

    } 
} 
+0

使用VBox佈局按鈕下的按鈕。 VBox vbox = new VBox(cardsPane,refreshButton); –

+0

謝謝你@UlukBiy生病給了我一個鏡頭:) – RyanL

+0

這個問題是以它爲中心的:/ – RyanL

回答

1

在您的按鈕操作處理程序中,您只需重置每個圖像視圖內的圖像。

refresh.setOnAction(new EventHandler<ActionEvent>() { 
    public void handle(ActionEvent e) { 
     imgView.setImage(new Image("card/" + cardNum() + ".png")); 
     imgView2.setImage(new Image("card/" + cardNum() + ".png")); 
     imgView3.setImage(new Image("card/" + cardNum() + ".png")); 
     imgView4.setImage(new Image("card/" + cardNum() + ".png")); 
    } 
}); 
+0

謝謝任何​​一個稍後看到這個問題的人,我還必須將我的imageViews設置爲final以便在事件中使用它們。 – RyanL

+0

你還在使用Java 7嗎?在Java 8中,將它們設置爲final不應該是必需的。 – mipa

0

Math.random()*4返回0和4之間的數首先,將imgimg2img3,並img4ArrayList。然後從上述函數中獲得一個隨機索引,在ArrayList的索引處獲取圖像,然後刷新它。

+0

對不起,我有點不清楚,在我嘗試在編輯中清除它之前,我的問題是我不知道如何去重新顯示按鈕事件中的圖像。他們也應該從我的cardNum()方法中得到一個新的隨機數 – RyanL