2017-02-19 3 views
0

ifとelseステートメントを使用して2つのボタンを操作することができました。別のif/elseステートメントを追加すると、プログラムはもう機能しなくなります。 GUIの他のボタンが機能するように、もっとステートメントを追加するにはどうすればいいですか?私はもちろんHandleButtonActionとifステートメントを使用してより多くのボタンを動作させる方法

package finalgui; 

import java.io.IOException; 
import java.net.URL; 
import java.util.ResourceBundle; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.fxml.Initializable; 
import javafx.scene.control.Label; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.stage.Stage; 


public class FXMLDocumentController{ 

@FXML 
private Button btnViewSPC; 
@FXML 
private Button btnBack; 

@FXML 
private void handleButtonAction(ActionEvent event) throws IOException{ 
Stage stage; 
Parent root; 
if(event.getSource()==btnViewSPC) { 
    //get reference to the button's stage 
    stage=(Stage) btnViewSPC.getScene().getWindow(); 
    //load up next scene 
    root = FXMLLoader.load(getClass().getResource("addviewdel.fxml")); 
} 
else{ 
    stage=(Stage) btnBack.getScene().getWindow(); 
    root = FXMLLoader.load(getClass().getResource("FinalGUI.fxml")); 
} 
Scene scene = new Scene(root); 
stage.setScene(scene); 
stage.show(); 
} 

} 

答えて

1

あなたが複数のボタン

しかし、個人的に私は userDataプロパティを使用して Buttonとデータを関連付ける好む
Object source = event.getSource(); 
if (source == button1) { 
    ... 
} else if (source == button2) { 
    ... 
} else if (source == button2) { 
    ... 
} 
... 
else { 
    ... 
} 

をdestinguishするために、複数のifのステートメントを使用することができますをコードする約7以上のボタンを持っています:

@FXML 
private void initialize() { 
    btnViewSPC.setUserData("addviewdel.fxml"); 
    btnViewSPC.setUserData("FinalGUI.fxml"); 
    ... 
} 

@FXML 
private void handleButtonAction(ActionEvent event) throws IOException { 
    Node source = (Node) event.getSource(); 

    Stage stage = (Stage) source.getScene().getWindow(); 
    Parent root = FXMLLoader.load(getClass().getResource(source.getUserData().toString())); 

    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
} 

または、異なるボタンからのイベントを処理するために異なる方法を使用します。コントローラーに「ヘルパーメソッド」を追加して、すべてのコードを繰り返さないようにすることができます。

@FXML 
private void handleButtonAction1(ActionEvent event) throws IOException { 
    showStage(event, "addviewdel.fxml"); 
} 

@FXML 
private void handleButtonAction2(ActionEvent event) throws IOException { 
    showStage(event, "FinalGUI.fxml"); 
} 

... 

private void showStage(ActionEvent event, String fxmlResource) throws IOException { 
    Node source = (Node) event.getSource(); 

    Stage stage = (Stage) source.getScene().getWindow(); 
    Parent root = FXMLLoader.load(getClass().getResource(fxmlResource)); 

    Scene scene = new Scene(root); 
    stage.setScene(scene); 
    stage.show(); 
} 
関連する問題