2017-02-19 8 views
-1

JavaFX 팝업 창이 메뉴 항목에서 열리도록하는 방법을 배우려고합니다. 마침내 새 창을 열어 봤지만 모달로 만들 수는 없습니다.JavaFX 팝업이 작동하지 않습니다.

장면 1 FXML :

<AnchorPane id="AnchorPane" prefHeight="200" prefWidth="320" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sceneswitchtest.Scene_1Controller"> 
    <children> 
     <Button fx:id="button" layoutX="126" layoutY="90" onAction="#handleButtonAction" text="Click Me!" /> 
     <Label fx:id="label" layoutX="126" layoutY="120" minHeight="16" minWidth="69" /> 
     <MenuBar fx:id="menuBar" layoutX="40.0" layoutY="27.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="0.0"> 
     <menus> 
      <Menu mnemonicParsing="false" text="File"> 
      <items> 
       <MenuItem mnemonicParsing="false" text="Close" /> 
        <MenuItem fx:id="MenuItemOpenScene2" mnemonicParsing="false" onAction="#OpenScene2" text="Open Scene 2" /> 
      </items> 
      </Menu> 
      <Menu mnemonicParsing="false" text="Edit"> 
      <items> 
       <MenuItem mnemonicParsing="false" text="Delete" /> 
      </items> 
      </Menu> 
      <Menu mnemonicParsing="false" text="Help"> 
      <items> 
       <MenuItem mnemonicParsing="false" text="About" /> 
      </items> 
      </Menu> 
     </menus> 
     </MenuBar> 
    </children> 
</AnchorPane> 

팝업 FXML :

<?xml version="1.0" encoding="UTF-8"?> 

<?import javafx.scene.layout.AnchorPane?> 


<AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sceneswitchtest.Scene_2Controller"> 

</AnchorPane> 

장면 1 개 컨트롤러 :

package sceneswitchtest; 

import java.io.IOException; 
import javafx.event.ActionEvent; 
import javafx.fxml.FXML; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Node; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.control.Label; 
import javafx.scene.control.MenuBar; 
import javafx.scene.control.MenuItem; 
import javafx.stage.Modality; 
import javafx.stage.Stage; 

public class Scene_1Controller { 

    @FXML 
    private Button button; 

    @FXML 
    private Label label; 

    @FXML 
    private MenuBar menuBar; 

    @FXML 
    private MenuItem MenuItemOpenScene2; 

    @FXML 
    void OpenScene2(ActionEvent event) throws IOException { 
     Stage appStage = (Stage) ((Node) menuBar).getScene().getWindow(); 
     Parent settingsParent = FXMLLoader.load(this.getClass().getResource("Scene_2.fxml")); 
     Scene settingsScene = new Scene(settingsParent); 
     appStage.setScene(settingsScene); 

//  appStage.initModality(Modality.WINDOW_MODAL); 
//  appStage.initOwner(menuBar.getScene().getWindow()); 

     appStage.show(); 
    } 

    @FXML 
    void handleButtonAction(ActionEvent event) throws IOException { 

    } 

} 

참고 : 위의 코드에서 선이 주석 여기에 내 코드입니다 out은 실패했고 Modality를 사용했습니다 .APPLICATION_MODAL

장면 2 (팝업) 컨트롤러 :

package sceneswitchtest; 


public class Scene_2Controller { 

} 

주요 방법

패키지 sceneswitchtest;

import javafx.application.Application; 
import javafx.fxml.FXMLLoader; 
import javafx.scene.Parent; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 

/** 
* 
* @author eric 
*/ 
public class SceneSwitchTest extends Application { 

    @Override 
    public void start(Stage stage) throws Exception { 
     Parent root = FXMLLoader.load(getClass().getResource("Scene_1.fxml")); 

     Scene scene = new Scene(root); 

     stage.setScene(scene); 
     stage.show(); 
    } 

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

} 
+1

팝업 창이 표시되거나 장면 만 표시하고 싶습니까? 팝업을 표시하는 방법을 묻지 만 코드가 기본 단계에서 장면을 전환하는 것처럼 보입니다. '스테이지'의 소유자를 자기 자신으로 설정하는 것은 의미가 없습니다. 주 무대 상단에 팝업을 표시하고 OpenScene2 메소드에 새로운 Stage를 만들고 양식, 소유자 및 show()를 설정합니다. – MBec

+0

감사합니다. MBec, 제안한대로 OpenScene2 메서드를 변경했습니다. – Luft

+0

BTW, 내 질문에 표를 던진 사람인지는 모르겠지만 누구든지 그 사람이 내 질문에 잘못이 없다는 것을 지적 할 수 있습니다. 맨 처음에 언급했듯이이 자료를 배우려고합니다. 내가 어떻게해야 하는지를 안다면 나는 물어볼 필요가 없었을 것이다. 합법적 인 질문을 표시함으로써 귀하는이 사이트가 비우호적 인 순결 속물에 의해 조장된다는 광범위한 의견의 타당성을 입증합니다. '그런가 말했다. – Luft

답변

0

다음은 팝업을 작동시키기 위해 만든 코드 변경 사항입니다.

@FXML 
void OpenScene2(ActionEvent event) throws IOException { 
    Parent settingsParent = FXMLLoader.load(this.getClass().getResource("/sceneswitchtest/Scene_2.fxml")); 
    Scene settingsScene = new Scene(settingsParent); 
    Stage popup = new Stage(); 
    popup.setScene(settingsScene); 
    popup.initModality(Modality.WINDOW_MODAL); 
    popup.initOwner(menuBar.getScene().getWindow()); 

    popup.show(); 
} 

올바른 방향으로 나를 가리키는 MBec에 감사드립니다.