ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • javaFX - MenuBar / Toolbar 컨트롤
    카테고리 없음 2020. 5. 23. 12:01

    MenuBar 컨트롤 : 계층적인 작업 선택 기능이 편리

     

    선언방법

     

    <MenuBar>
    
       <menus>
    
           <Menu text="file"> ... </menu>
    
           <Menu text="option"> ... </menu>
    
       </menus>
    
    </MenuBar>

    위 file 메뉴의 메뉴 아이템 추가.

    <Menu text="file">
    
       <items>
    
            <MenuItem text="New File" onAction="#handleNew" >
    
               <accelerator>
    
                   <KeyCodeCombination alt="DOWN" code="N" control="UP" meta="UP"
    
                                              shift="DOWN" shortcut="UP" />
    
               </acclelerator>
    
               <graphic>
    
                  <ImageView><image><Image url="@icons/abc.png" /></image></ImageView>
    
               </graphic>
    
           <MenuItem>
    
      </items>
    
    </Menu>

    MenuItem : Button과 동일하게 클릭하면 onAction 속성이 지정된 컨트롤러의 메서드를 호출해서 ActionEvent 를 처리. 

     

    <accelerator> : 단축키를 설정. 단축키는 KeyCodeCombination 객체로 생성.

     

    alt 키, control 키 , shift 키 , code 키의 조합으로 구성할 수 있음.

     

    DOWN으로 설정된 키와 code 키를 동시에 누르면 onAction 속성에 지정된 메서드 호출.

     

    "New File" 메뉴 아이템의 경우는 alt + shift + N을 동시에 누르면 handleNew() 메서드 실행.

     

    <graphic> : 메뉴 아이템 앞에 아이콘 추가.

     


    ToolBar 컨트롤 : 빠르게 작업을 선택하고 싶을 때

     

     : UI 컨트롤이면서 컨테이너이다.

     

    주로 Button이 추가되고, ComboBox 같은 다른 컨트롤들도 배치 가능.

    <ToolBar>
    
        <items>
    
            <Button onAction="#handleNew">
    
              <graphic>
    
                  <ImageView><image><Image url="@icons/abc.png" /></image></ImageView>
    
               </graphic>
    
           </Button>
    
        </items>
    
    </ToolBar>

     

    예제

     

    FXML
    
    <?xml version="1.0" encoding="UTF-8"?>
    
    
    
    <?import javafx.scene.layout.*?>
    
    <?import javafx.scene.control.*?>
    
    <?import javafx.scene.input.*?>
    
    <?import javafx.scene.image.*?>
    
    <?import javafx.collections.*?>
    
    <?import java.lang.*?>
    
    
    
    <BorderPane xmlns:fx="http://javafx.com/fxml" fx:controller="thisisjava.RootController"
    
    prefHeight="200.0" prefWidth="400.0" >
    
    <top>
    
    <VBox>
    
    <children>
    
    <MenuBar>
    
    <menus>
    
    <Menu text="파일">
    
    <items>
    
    <MenuItem text="New File" onAction="#handleNew" >
    
    <accelerator>
    
    <KeyCodeCombination alt="DOWN" code="N" control="UP" meta="UP" shift="DOWN" shortcut="UP" />
    
    </accelerator>
    
    <graphic>
    
    <ImageView><image><Image url="@icons/new.png" /></image></ImageView>
    
    </graphic>
    
    </MenuItem>
    
    <MenuItem text="열기"  onAction="#handleOpen" >
    
    <accelerator>
    
    <KeyCodeCombination alt="UP" code="O" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
    
    </accelerator>
    
    <graphic>
    
    <ImageView><image><Image url="@icons/open.png" /></image></ImageView>
    
    </graphic>
    
    </MenuItem>
    
    <MenuItem text="저장" onAction="#handleSave" >
    
    <accelerator>
    
    <KeyCodeCombination alt="UP" code="S" control="DOWN" meta="UP" shift="UP" shortcut="UP" />
    
    </accelerator>
    
    <graphic>
    
    <ImageView><image> <Image url="@icons/save.png" /></image> </ImageView>
    
    </graphic>                     
    
    </MenuItem>
    
    <SeparatorMenuItem />
    
    <MenuItem text="끝내기" onAction="#handleExit"/>
    
    </items>
    
    </Menu>
    
    </menus>
    
    </MenuBar>
    
         
    
    <ToolBar>
    
    <items>
    
    <Button onAction="#handleNew">
    
    <graphic>
    
    <ImageView><image><Image url="@icons/new.png" /></image></ImageView>
    
    </graphic>
    
    </Button>
    
    <Button onAction="#handleOpen">
    
    <graphic>
    
    <ImageView><image><Image url="@icons/open.png" /></image></ImageView>
    
    </graphic>
    
    </Button>
    
    <Button onAction="#handleSave">
    
    <graphic>
    
    <ImageView><image><Image url="@icons/save.png" /></image></ImageView>
    
    </graphic>
    
    </Button>
    
    <ComboBox prefWidth="100" promptText="선택" >
    
    <items>
    
    <FXCollections fx:factory="observableArrayList">
    
    <String fx:value="공개"/>
    
    <String fx:value="비공개"/>
    
    </FXCollections>
    
    </items>
    
    </ComboBox>
    
    </items>
    
    </ToolBar>
    
    </children>
    
    </VBox>
    
    </top>
    
    
    <center>
    
    <TextArea fx:id="textArea"/>
    
    </center>
    
    </BorderPane>
    
    
    
    
    자바1)
    
    package thisisjava;
    
    
    
    import java.net.URL;
    
    import java.util.ResourceBundle;
    
    
    
    import javafx.application.Platform;
    
    import javafx.event.ActionEvent;
    
    import javafx.fxml.FXML;
    
    import javafx.fxml.Initializable;
    
    import javafx.scene.control.TextArea;
    
    
    
    public class RootController implements Initializable {
    
    @FXML private TextArea textArea;
    
    
    @Override
    
    public void initialize(URL location, ResourceBundle resources) {
    
    }
    
    
    public void handleNew(ActionEvent e) {
    
    textArea.appendText("New File\n");
    
    }
    
    
    public void handleOpen(ActionEvent e) {
    
    textArea.appendText("Open File\n");
    
    }
    
    
    public void handleSave(ActionEvent e) {
    
    textArea.appendText("Save File\n");
    
    }
    
    
    public void handleExit(ActionEvent e) {
    
    Platform.exit();
    
    }
    
    }
    
    
    
    
    자바2)
    
    package thisisjava;
    
    
    
    import javafx.application.Application;
    
    import javafx.fxml.FXMLLoader;
    
    import javafx.scene.Parent;
    
    import javafx.scene.Scene;
    
    import javafx.stage.Stage;
    
    
    
    public class AppMain extends Application {
    
    @Override
    
    public void start(Stage primaryStage) throws Exception {
    
    Parent root = (Parent)FXMLLoader.load(getClass().getResource("root.fxml"));
    
    Scene scene = new Scene(root);
    
    
    primaryStage.setTitle("MenuBar&ToolBar");
    
    primaryStage.setScene(scene);
    
    primaryStage.show();
    
    }
    
    
    public static void main(String[] args) {
    
    launch(args);
    
    }
    
    }

    댓글

Designed by Tistory.