2013-07-24 3 views
0

응용 프로그램 모달 대화 상자를 만들려면 예 : this을 사용하고 있습니다. 내 대화 상자 (오른쪽 상단 모서리의 빨간색)에서 나가기 버튼을 클릭하면 모든 것이 정상적으로 작동합니다. 대화 상자가 닫히고 정상적으로 열 수 있습니다. 그러나 대화 상자를 닫는 Button을 추가하려고하면 다시 열려고 시도 할 때까지 모든 것이 제대로 작동합니다. 그 후, 그것은 IllegalStateException을 던졌습니다. (필요한 경우이 예외로 응답을 업데이트합니다).JavaFX 닫는 응용 프로그램 모달 대화 상자

btnClose.setOnAction(new EventHandler<ActionEvent>() { 
     @Override 
     public void handle(ActionEvent event) { 
      dialog.close(); 
     } 
    }); 

사람이 어떻게 제대로 가까운 응용 프로그램 모달 대화 말해 줄 수 :

이 내가 대화 상자를 닫습니다 방법을 보여줍니다 이벤트 핸들러는? 미리 감사드립니다.

답변

3

편집

난 그냥 경우 누군가의 샘플 코드와 함께 내 대답을 유지 생각, 당신은 문제를 발견 참조 다른 유사한 문제가 있습니다.


btn 닫기 조치는 나를 위해 작동하므로 게시되지 않은 코드에 문제가있는 것 같습니다. 노력

import javafx.application.Application; 
import javafx.event.*; 
import javafx.geometry.Pos; 
import javafx.scene.*; 
import javafx.scene.control.*; 
import javafx.scene.layout.*; 
import javafx.stage.*; 

public class DialogClosing extends Application { 
    @Override public void start(final Stage stage) { 
     final Button showDialog = new Button("Show Dialog"); 
     showDialog.setOnAction(new EventHandler<ActionEvent>() { 
      @Override public void handle(ActionEvent actionEvent) { 
       showDialog(stage, showDialog); 
      } 
     }); 

     StackPane layout = new StackPane(); 
     layout.getChildren().setAll(
      showDialog 
     ); 

     layout.setStyle("-fx-padding: 10px;"); 
     stage.setScene(
      new Scene(
       layout 
      ) 
     ); 
     stage.show(); 
    } 

    private Stage showDialog(Window parent, final Node showControlNode) { 
     showControlNode.setDisable(true); 

     final Stage dialog = new Stage(); 
     dialog.initOwner(parent); 
     dialog.initStyle(StageStyle.UTILITY); 
     dialog.setX(parent.getX()); 
     dialog.setY(parent.getY() + parent.getHeight()); 

     Button closeDialog = new Button("Close Dialog"); 
     closeDialog.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent actionEvent) { 
       dialog.close(); 
      } 
     }); 
     dialog.setOnHidden(new EventHandler<WindowEvent>() { 
      @Override 
      public void handle(WindowEvent windowEvent) { 
       showControlNode.setDisable(false); 
      } 
     }); 

     VBox layout = new VBox(10); 
     layout.setAlignment(Pos.CENTER); 
     layout.getChildren().addAll(
      new Label("Hello World!"), 
      closeDialog 
     ); 
     layout.setStyle("-fx-padding: 10px;"); 

     Scene scene = new Scene(
      layout, 
      125, 
      100 
     ); 

     dialog.setScene(scene); 
     dialog.show(); 

     return dialog; 
    } 

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

closingtimeoutput

+0

감사 : 여기

내가 그것을 테스트하기 위해 만든 샘플입니다. 예, Stage가 정적으로 선언 될 때까지 작동합니다. –

1

좋습니다. 상황이 수정되었습니다. 불편을 드려 죄송합니다. 문제는 내가 내 Stage 정적으로 선언했다.