-
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); } }