2013-01-05 2 views
2

사용자가 Stage을 움직이고 닫을 때 화면에 Stage의 마지막 위치를 유지하려고합니다. Swing에서 동일한 창 인스턴스를 유지하면 이동, 닫기 및 다시 열린 후 동일한 위치에 표시됩니다. 왜 Stage은 JavaFX의 같은 위치에 항상 표시됩니까? 당신이이 코드를 테스트 대화 상자를 열고 이동을 한 후 닫고 다시 열 경우재개 한 후 스테이지 크기와 위치가 유지되지 않는 이유는 무엇입니까?

public class SwingTest { 

    public static void main(String[] args) { 
     JFrame f = new JFrame(); 
     JButton b = new JButton("Show Dialog"); 
     final JDialog d = new JDialog(f); 
     d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE); 
     d.setSize(300, 300); 
     b.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       d.setVisible(true); 
      } 
     }); 
     JPanel p = new JPanel(); 
     p.add(b); 
     f.add(p); 
     f.pack(); 
     f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     f.setLocationRelativeTo(null); 
     f.setVisible(true); 
    } 

} 

: 스윙 코드의

aboutStage = new Stage(); 
aboutStage.setTitle("About " + Constants.APP_TITLE); 
aboutStage.setResizable(false); 
aboutStage.initModality(Modality.APPLICATION_MODAL); 
aboutStage.initOwner(primaryStage); 
aboutStage.initStyle(StageStyle.UTILITY); 

Parent page = (Parent) FXMLLoader.load(
     AboutWindowController.class.getResource("about.fxml")); 
Scene scene = new Scene(page); 
aboutStage.setScene(scene); 



miAbout.setOnAction(new EventHandler<ActionEvent>() { 
    @Override 
    public void handle(ActionEvent t) { 
     Stage about = mainClass.getAboutStage(); 
     about.show(); 
    } 
}); 

예 :

은 아래에있는 내 코드 샘플 확인합니다. 다시 열 때 대화 상자가 같은 상태에 있음을 알 수 있습니다.

답변

0

질문을 완전히 이해할 수 없습니다. 스윙의 같은 위치에 창을 표시하는 방법에 대해 좀 더 정확하게 설명해주십시오.

내가 알기로, 창을 닫은 후에도 같은 위치에 창을 표시하는 유일한 방법은 창을 숨기려면 (끝내지 않음) JFrame의 기본 동작을 사용할 때입니다. 반면 JavaFX Scene의 경우 처음부터 새 창을 여는 것과 같은 새 리소스를로드하고 있습니다.

또한 Swing을 JavaFX와 통합 할 수 있습니다. 더 알아 보려면 here을 클릭하십시오.

+0

스윙에서는 동일한 JDialog 인스턴스를 다시 사용합니다. 문을 닫고 다시 열면 상태는 똑같습니다. 즉, 동일한 위치에 있고 볼 때와 같은 크기입니다. – ceklock

+0

지금 내 질문에 스윙 코드를 참조하십시오. – ceklock

1

SWING 구현에서는 표시 할 수없는 것으로 표시하는 창이 삭제됩니다. JDialog를 다시 표시하면 Swing API는 JDialog가 삭제 된 것과 동일한 상태로 만듭니다. 체크 아웃 the Documentation

hide() 메서드로 창을 숨기거나 close() 메서드로 창을 닫을 때 JavaFX의 경우 스테이지의 상태를 재생할 수 없습니다 (물론 수동으로 프로그래밍하지 않는 한) . Discussion 아쉽게도 API가 생성되는 방식입니다.

관련 문제