序言
学习Java基础有一段时间了,想着怎么应用到实践中,自己开发些小工具应该是最好的java基础练习方法了,既然是工具的话,肯定会要有用户界面。因为基于java开发的主要的面向网络应用,基于Java的可用的GUI不多,JavaFx是Oracle推荐使用的可用于界面开发的GUI, 用来做小工具是不错的。
Javafx安装
关于如何在Eclipse上安装Javafx插件,网上有很多的教程,可参看下面这个blog.
安装e(fx)clipse到Eclipse
新建JavaFX工程
关于JavaFX布局
新建工程后会自动生成一个.fxml布局文件,右击该文件,选择使用Scene Builder打开,我们就可以使用Scene Builder 工具进行拖拽进行控件布局了。
关于Containers
我们先选择一个布局器(Containers),然后我们就拖拽控件在上面布局了,布局过程中我们还可以使用Preview功能查看整体布局效果。
关于控件
我们拖拽各种控件进行布局,其中一个最主要的参数ID需要设置,我们后续程序要以这个ID来访问这个控件。
如何在代码中引用控件
步骤1: 新建控制器文件
- 我们先新建一个与工程同名的控制器描述文件,如XXXXController.java.
在该文件里我们显示导出需要被使用到的控件,代码如下:
package application;
import javafx.fxml.FXML;
import javafx.scene.control.TextArea;;
public class KHJSONController {
@FXML private TextArea ID_TEXTAREA_JSON_CONTENT;
@FXML private TextArea ID_TEXTAREA_HEX_FRAME;
}
步骤2:代码引用控件
代码引用控件,代码如下:
Parent root = FXMLLoader.load(getClass().getResource("KHJSON.fxml"));
TextArea textArea = (TextArea)root.lookup("#ID_TEXTAREA_JSON_CONTENT");
TextArea textAreaHexFrameContent = (TextArea)root.lookup("#ID_TEXTAREA_HEX_FRAME");
Button button = (Button)root.lookup("#ID_BUTTON_GENERATE_FRAME");
关于窗体大小自适应
我们可以使用ToolKit获取当前屏幕大小,然后可以按比例设置窗体大小,以做到屏幕自适应。
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
primaryStage.setScene(new Scene(root, dimension.getWidth()/2, dimension.getHeight()/4*3));
primaryStage.show();
完整 代码实例
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
Parent root = FXMLLoader.load(getClass().getResource("KHJSON.fxml"));
TextArea textArea = (TextArea)root.lookup("#ID_TEXTAREA_JSON_CONTENT");
TextArea textAreaHexFrameContent = (TextArea)root.lookup("#ID_TEXTAREA_HEX_FRAME");
Button button = (Button)root.lookup("#ID_BUTTON_GENERATE_FRAME");
button.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
String JSONcontent = textArea.getText();
textAreaHexFrameContent.setText(JSONcontent);
}
});
Dimension dimension = Toolkit.getDefaultToolkit().getScreenSize();
primaryStage.setScene(new Scene(root, dimension.getWidth()/2, dimension.getHeight()/4*3));
primaryStage.show();
}catch(IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}