使用Fxml作为界面的javafx

时间:2022-04-07 23:38:27

Fxml是一种以Xml的格式表示JavaFx界面对象的问价,Fxml文件中的每一个元素可以映射到JavaFx中的一个类,每个Fxml的元素的属性或者其子元素都可以为该对应JavaFxml类的属性。Fxm的应用到JavaFx上可以作为界面使用,其好处也是显而易见的,将界面从代码中分离出来。使整个程序的逻辑结构更加清晰。并且Orcale还开发出了SceneBuild 直接在界面上左图形拖拽来拼接界面,让界面的开发显得更加直观。现在我们用JavaFx的main+fxml+controller的结构来开发一个简单的记事本结构程序。

· 首先,我们先用SceneBuild将大致的界面画出来,如下图所示:额,应该先创建Fxml的文件的: 在eclipse中右键 -- new  - - other -- JavaFx --JavaFx Fxml  写好文件名之后沿着一路点击next就可以了。


使用Fxml作为界面的javafx

如图中所示:SceneBuild里的左上侧Library用来对组件的搜索,左下侧的hierarchy里可以看到界面中的组件的结构,右侧是对其大小,属性,连接的事件等的设定,这里没有将图片剪接出来。

然后在Main类里写好连接Fxml的方法,这里的一个要点就是和Fxml的连接。注意连接方法和假如fxml的文件和main文件不在同一个文件夹的情况,代码如下所示。

		Parent root = FXMLLoader.load(getClass().getResource("NoteBook.fxml"));  //与Fxml连接的方式:注:此时是在同一个包里的
		
		Scene scene = new Scene(root,550,600);
		
		primaryStage.setTitle("笔记本");
		primaryStage.setScene(scene);
		primaryStage.show();
然后是controlller的写法:用@fxml作为注释来连上fxml的文件:
public class Control {
	
	@FXML
	private AnchorPane layoutpane;
	@FXML
	private TextArea filecontent;
	
	private File files;
	@FXML
	private void onmenuOpen(ActionEvent event) throws Exception{
		FileChooser filechos = new FileChooser();
		files = filechos.showOpenDialog(layoutpane.getScene().getWindow());
		if (files !=null){
			filecontent.setText(readFiles(files));
		}
	}
	@FXML
	private void onmenuSave(ActionEvent event) throws Exception{
		if(files==null){
			FileChooser filechos = new FileChooser();
			files = filechos.showSaveDialog(layoutpane.getScene().getWindow());
		}
		writeFiles(files, filecontent.getText());
	}
	@FXML
	private void onmenuclose(ActionEvent event){
		System.exit(0);
	}
	
	@FXML
	private void onmenudelet(ActionEvent event){
		filecontent.setText("");
	}
	
	@FXML
	private void OonmenuAbout(ActionEvent event){
		JOptionPane.showMessageDialog(null, "JavaFX记事本是一款使用JavaFX开发的记事本。" ,"关于",  JOptionPane.PLAIN_MESSAGE);  
	}
	
	   @FXML  
	    private void onContextSelectAll(ActionEvent event) {  
	        filecontent.selectAll();  
	    }

由于写的是关于记事本的程序,所以主要用到的IO流和文件选择器之类的组件和方法。以后会对JavaFx的各个组件进行探究,到时后主要就是转载了,人家是官方毕竟,写的肯定要比我自己理解的好的多。还有,这里还有一个关于文本换行的写法,我感觉这里也是一个问题,稍微不注意,就会掉进大坑里


然后是将controller和Fxml连接起来。controller里装的都是Fxml里所需要的的各式各样的触发事件,没有controlller,Fxml只是一个界面而已。在scenebuild里的左下侧controller里找到controller class,将对应的controller选上,然后在scenebuild的选项里就可以看到有@fxml注释标记的属性,方法,事件了。将对应的fx:id 和onAction一 一选上之后保存,然后刷新Fxml(这里也是一个小点,更改完Fxml如果不刷新的话,还是会照着原来的fxml编译运行)。完成之后运行main方法,其对应的结果如下图所示:                        

 使用Fxml作为界面的javafx