2014-01-07 6 views
2

창에 팝업 대화 상자가 표시되어 다른 구성 요소의 맨 위에 나타납니다. 이제 프로그램의 다른 모든 구성 요소에 액세스하지 못하게하고 싶습니다. 그것을하는 방법?팝업 창에서 양식 사용 javafx

+0

나는 또한이 같은 문제 ... 이 시도 http://stackoverflow.com/questions/19953306/lock-parent-controller- till-child-controller-not-close –

+0

그게 좋은 질문입니다. 나는 모든 주어진 답을 안다. 하지만 그것은 팝업 클래스의 주요 실수로 보인다. 당신이 그것의 양식을 설정할 수 없다면, 팝업은 무엇입니까? 간단한 모달 입력을위한 새로운 "무대"를 만들고 싶지 않습니다. 나는 자바를 좋아한다. 그러나 이것은 이상합니다 ... – Sauer

답변

2

popup API에는 원하는대로 정확히 initModality(Modality.APPLICATION_MODAL); 메서드가 없습니다. 이 경우 팝업 창을 스테이지로 만들고 위에서 언급 한 방법을 사용할 수 있습니다. 이 솔루션 @Xsleek입니다

1

, 예제 코드 : -

package popupexample; 

import java.text.SimpleDateFormat; 
import java.util.Date; 
import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.Insets; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.layout.StackPane; 
import javafx.scene.layout.VBoxBuilder; 
import javafx.scene.text.Text; 
import javafx.stage.Modality; 
import javafx.stage.Stage; 

/** 
* 
* @author reegan 
*/ 
public class PopUpExample extends Application { 

    @Override 
    public void start(Stage primaryStage) { 
     Button btn = new Button(); 
     btn.setText("Say 'Hello World'"); 
     btn.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent event) { 
       popupErrorMsg(); 
      } 
     }); 

     StackPane root = new StackPane(); 
     root.getChildren().add(btn); 

     Scene scene = new Scene(root, 300, 250); 

     primaryStage.setTitle("Hello World!"); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
    } 

    /** 
    * The main() method is ignored in correctly deployed JavaFX application. 
    * main() serves only as fallback in case the application can not be 
    * launched through deployment artifacts, e.g., in IDEs with limited FX 
    * support. NetBeans ignores main(). 
    * 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     launch(args); 
    } 


    public void popupErrorMsg() { 
     final Stage myDialog = new Stage(); 
     myDialog.initModality(Modality.APPLICATION_MODAL); 
     Button okButton = new Button("Ok"); 
     okButton.setOnAction(new EventHandler<ActionEvent>() { 
      @Override 
      public void handle(ActionEvent arg0) { 
       myDialog.close(); 
      } 
     }); 
     Date todayDate = new Date(); 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy"); 
     Scene myDialogScene = new Scene(VBoxBuilder.create() 
       .children(new Text("Please Enter Validate Date \n \t "+ dateFormat.format(todayDate)), okButton) 
       .spacing(30) 
       .alignment(Pos.CENTER) 
       .padding(new Insets(10)) 
       .build()); 

     myDialog.setScene(myDialogScene); 
     myDialog.show(); 
    } 
}