JavaFX에서 모달 창을 만드는 방법을 알 수 없습니다. 기본적으로 파일 선택기가 있으며 파일을 선택할 때 사용자에게 질문을하고 싶습니다. 파일을 파싱하려면이 정보가 필요하므로 실행이 응답을 기다려야합니다.JavaFX 2.1에서 모달 창을 만드는 방법
나는 this question을 보았지만이 동작을 구현하는 방법을 찾을 수 없었습니다. 여기
JavaFX에서 모달 창을 만드는 방법을 알 수 없습니다. 기본적으로 파일 선택기가 있으며 파일을 선택할 때 사용자에게 질문을하고 싶습니다. 파일을 파싱하려면이 정보가 필요하므로 실행이 응답을 기다려야합니다.JavaFX 2.1에서 모달 창을 만드는 방법
나는 this question을 보았지만이 동작을 구현하는 방법을 찾을 수 없었습니다. 여기
내가 용액 현재 스테이지 위에 모달 스테이지를 생성하고, 대화 제어를위한 이벤트 핸들러를 통해 대화 결과에 대해 조치를 취 자바 FX 2.1 모달 다이얼로그에 대해 이전에 생성 link to a solution이다.
업데이트
선행 연결 솔루션은 대화 상자가 해산 된 후에 조치를 취할 날짜가 이벤트 핸들러 접근 방식을 사용합니다. 이 접근법은 JavaFX 2.2 이전 구현에 유효합니다. JavaFX 8 이상에서는 이벤트 핸들러가 필요하지 않으며 대신 새 Stage showAndWait()
메소드를 사용하십시오. 예상대로 작동하는 것들에 대한 위해가 WINDOW_MODAL 또는 APPLICATION_MODAL 중 하나에 스테이지의 양상을 초기화하는 스테이지 및의 소유자를 초기화하는 것이 중요하다,
Stage dialog = new Stage();
// populate dialog with controls.
...
dialog.initOwner(parentStage);
dialog.initModality(Modality.APPLICATION_MODAL);
dialog.showAndWait();
// process result of dialog operation.
...
참고 : 예를 들면.
JavaFX 8과 ControlsFX에 몇 가지 고품질 표준 UI 대화 상자가 있습니다. 사용자 요구 사항에 맞으면 자체 개발보다는 사용하는 것이 좋습니다. 내장 된 JavaFX Dialog 및 Alert 클래스에는 또한 initOwner
및 initModality
및메쏘드가 있으므로 사용자가 원하는대로 양식을 설정할 수 있습니다. 기본적으로 내장 대화 상자는 응용 프로그램 모달입니다.
내 생각에 부모 창은 항상 활성화되어 있기 때문에 이것은 좋은 해결책이 아닙니다. 예를 들어
당신은 클릭 버튼 후 모달로 열려있는 창을 원한다면 ...
private void clickShow(ActionEvent event) {
Stage stage = new Stage();
Parent root = FXMLLoader.load(
YourClassController.class.getResource("YourClass.fxml"));
stage.setScene(new Scene(root));
stage.setTitle("My modal window");
stage.initModality(Modality.WINDOW_MODAL);
stage.initOwner(
((Node)event.getSource()).getScene().getWindow());
stage.show();
}
이제 새 창 REALY 모달입니다 - 부모가 블록입니다. 도 사용하실 수 있습니다
Modality.APPLICATION_MODAL
나는 stage.initModality (Modality.APPLICATION_MODAL)를 사용해야했다. 호출 부모를 차단합니다. showAndWait()를 사용하여 호출자를 차단하지 못했습니다 (JFXPanel에서 전화를 걸었습니다). – torwalker
승인 된 응답이어야합니다. –
내 견본과 같은 응용 프로그램을 만들 수 있습니다. 이것은 단일 파일 JavaFX 응용 프로그램입니다.
public class JavaFXApplication1 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) {
Stage stage;
stage = new Stage();
final SwingNode swingNode = new SwingNode();
createSwingContent(swingNode);
StackPane pane = new StackPane();
pane.getChildren().add(swingNode);
stage.initModality(Modality.APPLICATION_MODAL);
stage.setTitle("Swing in JavaFX");
stage.setScene(new Scene(pane, 250, 150));
stage.show();
}
});
StackPane root = new StackPane();
root.getChildren().add(btn);
Scene scene = new Scene(root, 300, 250);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
private void createSwingContent(final SwingNode swingNode) {
SwingUtilities.invokeLater(() -> {
try {
Path currentRelativePath = Paths.get("");
String s = currentRelativePath.toAbsolutePath().toString();
JasperDesign jasperDesign = JRXmlLoader.load(s + "/src/reports/report1.jrxml");
String query = "SELECT * FROM `accounttype`";
JRDesignQuery jrquery = new JRDesignQuery();
jrquery.setText(query);
jasperDesign.setQuery(jrquery);
JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
JasperPrint JasperPrint = JasperFillManager.fillReport(jasperReport, null, c);
//JRViewer viewer = new JRViewer(JasperPrint);
swingNode.setContent(new JRViewer(JasperPrint));
} catch (JRException ex) {
Logger.getLogger(AccountTypeController.class.getName()).log(Level.SEVERE, null, ex);
}
});
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
설명을 추가하면 답변의 품질이 향상 될 수 있습니다. 도움이 될만한 대답과 그 이유에 대해 알아보십시오. – toonice
ControlsFX 라이브러리는 2014 년 1 월에 릴리스 될 JavaFX 버전 8.0 이상용으로 개발되었으므로 고려해야합니다. – bazeusz
@jewelsea는 javafx 1.3 용 파일 선택기 기능이 있습니까? –
Avinash, 새 질문을 새 질문으로하는 것이 가장 좋습니다. JavaFX 1.3은 쓸모가 없으므로 사용하지 말라. Swing [JFileChooser] (https://docs.oracle.com/javase/8/docs/api/javax/swing/JFileChooser.html)을 사용할 수는 있지만 직접 FileChooser가 있다고 생각하지 않습니다. 그것으로. – jewelsea