Java/JavaFX 개념

Java FX // 개념 // Popup & Dialog

문스코딩 2018. 7. 27. 13:03

Java FX

업데이트 :: 2018.07.27



팝업은 투명한 컨테이너를 제공하는 모달리스 다이얼로그입니다.

따라서 소유자 윈도우는 계속 사용될 수 있습니다.

팝업에는 다음과 같은 형식이 있습니다.

  • tooltip
  • notification
  • drop down boxes

생성방법

Popup popup = new Popup();
popup.getContent().add(FXMLoader.load(getClass().getResource("popup.fxml")));

popup.show(primaryStage);
popup.show(primaryStage, anchorX, anchorY);

다른 윈도우에 포커르가 가면 자동으로 닫히게 하는 메소드

popup.setAutoHide(true);

Tooptip

<HBox xmlns="http://javafx.com/javafx"
      xmlns:fx="http://javafx.com/fxml"
      alignment="CENTER"
      style="-fx-background-color: black; -fx-background-radius: 20;">
    <padding>
        <Insets topRightBottomLeft="10"/>
    </padding>
    <children>
        <ImageView id="imgMessage" fitWidth="30" preserveRatio="true">
            <image>
                <Image url="/res/tooltip.png"/>
            </image>
        </ImageView>
        <Label id="lbMessage" style="-fx-text-fill: white;" text="메세지가 왔습니다.">
            <HBox.margin>
                <Insets left="5" right="5"/>
            </HBox.margin>
        </Label>
    </children>
</HBox>

public void showTooptip(String message) {
    try {
        Popup popup = new Popup();
        Parent parent = FXMLLoader.load(getClass().getResource("../views/modules/tooltip.fxml"));
        parent.setOnMouseClicked(event -> popup.hide());

        // == 텍스트 ==
        Label lbMessage = (Label) parent.lookup("#lbMessage");
        lbMessage.setText(message);

        popup.getContent().add(parent);
        popup.setAutoHide(true);
        System.out.println(primaryStage);
        popup.show(primaryStage);
    } catch (IOException e) {
        // TODO 에러
    }
}

Dialog

다이얼로그는 하나의 새로운 Stage를 올리는 것과 같습니다.

  • DECORATED :: 일반적인 윈도우 시타일 배경이 흰색 제물줄에 장식
  • UNDECORATED :: 배경이 흰색, 제목줄 없음
  • TRANSPARENT :: 배경이 투명, 제목줄 없음
  • UNIFIED :: DECORATED와 동일하나, 내용물의 경계선이 없음
  • UTILITY :: 배경이 흰색, 제목줄에 타이틀 종료 버튼만 있음

<AnchorPane xmlns="http://javafx.com/javafx"
            xmlns:fx="http://javafx.com/fxml"
            prefHeight="150.0" prefWidth="400.0">
    <children>
        <ImageView fitWidth="50" fitHeight="50" layoutX="15" layoutY="15" preserveRatio="true">
            <image>
                <Image url="/res/tooltip.png" />
            </image>
        </ImageView>
        <Button id="btnOK" layoutX="336" layoutY="104" text="확인" />
        <Label id="lbMessage" layoutX="87" layoutY="33" prefHeight="15" prefWidth="290" />
    </children>
</AnchorPane>

public void showDialog(String message) {
    try {
        Stage dialog = new Stage(StageStyle.UTILITY);
        dialog.initModality(Modality.WINDOW_MODAL);
        dialog.initOwner(primaryStage);
        dialog.setTitle("확인"); // dialog title

        Parent parent = FXMLLoader.load(getClass().getResource("../views/modules/dialog.fxml"));
        Label lbMessage = (Label) parent.lookup("#lbMessage");
        lbMessage.setText(message);

        Button btnOK = (Button) parent.lookup("#btnOK");
        btnOK.setOnAction(event -> dialog.close());
        Scene scene = new Scene(parent);
        dialog.setScene(scene);
        dialog.setResizable(false);
        dialog.show();
    } catch (IOException e) {
        // TODO 에러
    }
}

Created by SDM

작성자 정보

e-mail :: jm921106@naver.com || jm921106@gmail.com

github :: https://github.com/moonscoding

반응형

'Java > JavaFX 개념' 카테고리의 다른 글

Java FX // 개념 // Controller  (0) 2018.07.27
Java FX // 개념// Scene  (1) 2018.07.26
JavaFX // 개념 // TableView  (0) 2018.07.26