本文主要是介绍JAVA项目swing转javafx语法规则以及示例代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《JAVA项目swing转javafx语法规则以及示例代码》:本文主要介绍JAVA项目swing转javafx语法规则以及示例代码的相关资料,文中详细讲解了主类继承、窗口创建、布局管理、控件替换、...
Java Swing → JavaFX 项目迁移时,javascript语法/API 的转换规则几乎是“一对一可查表”的。下面把你 90% 会碰到的转换直接列成表格,照着改就行,基本不需要动逻辑。
| Swing(旧) | JavaFX(新) | 转换规则 + 备注 |
|---|---|---|
| 主类继承 | ||
| extends JFrame | extends Application | 必须重写 start(Stage primaryStage) |
| 窗口创建 | ||
| new JFrame(“标题”) | new Stage() + primaryStage.setTitle(“标题”) | JavaFX 用 Stage 代替 JFrame |
| frame.setDefaultCloseoperation(EXIT_ON_CLOSE) | primaryStage.setOnCloseRequest(e -> System.exit(0)) | 或直接不写,默认关闭就是退出 |
| 布局管理器 | ||
| BorderLayout | BorderPane | Top / Bottom / Left / Right / Center |
| FlowLayout | Flowpane / HBox / vbox | HBox 横排,VBox 竖排 |
| GridLayout | GridPane | 最常用,行列灵活 |
| BoxLayout | VBox / HBox | 基本一样 |
| CardLayout | StackPane + TabPane / ToggleButton + visibility | 推荐用 TabPane 或自己用 setVisible() 控制 |
| 常用控件 | ||
| JButton | Button | API 几乎一样 |
| JLabel | Label | 一样 |
| JTextField | TextField | 一样 |
| JPasswordField | PasswordField | 一样 |
| JTextArea | TextArea | 一样 |
| JCheckBox | CheckBox | 一样 |
| JRadioButton | RadioButton android+ ToggleGroup | 必须加 ToggleGroup 实现单选 |
| JComboBox | ComboBox | 一样,但泛型更强 |
| JList | ListView | 一样 |
| JTable | TableView + TableColumn | 最大差异!需要定义实体类 + PropertyValueFactory |
| jscrollPane | ScrollPane | 用法一样 |
| JMenuBar / JMenu / JMenuItem | MenuBar / Menu / MenuItem | 基本一样 |
| JFileChooser | FileChooser | API 略有不同,但功能一致 |
| JDialog | Stage + Modality | 模态对话框用 new Stage(StageStyle.UTILITY) + initModality(Modality.APPLICATION_MODAL) |
| 事件监听 | ||
| button.addActionListener(e -> …) | button.setOnAction(e -> …) | 完全一致,只是方法名改了 |
| 线程安全(更新 UI) | ||
| SwingUtilities.invokeLater(() -> …) | Platform.runLater(() -> …) | 必须记住!JavaFX 所有 UI 操作都要在 JavaFX 线程里 |
| 启动方式 | ||
| pubjavascriptlic static void main(String[] args) { new MyFrame().setVisible(true); } | public static void main(String[] args) { Application.launch(MyApp.class, args); } | 必须调用 Application.launch(),不能自己 new |
| 图标 | ||
| frame.setIconImage(img) | primaryStage.getIcons().add(new Image(“icon.png”)) | 路径可以是 classpath 里的资源 |
| 字体、颜色、边距 | ||
| 基本都一样 | 但 JavaFX 更推荐用 css | -fx-font-size: 14px; -fx-text-fill: red; 写在 style 或外部 css 文件 |
| 显示窗口 | ||
| frame.setVisible(true) | primaryStage.show() | 注意是 show(),不是 setVisible |
最常用的“一行换一行”速查表(直接全局替换)
| 你原来的 Swing 代码 | 替换成 JavaFX 代码(复制粘贴) |
|---|---|
| new JFrame() | primaryStage |
| setTitle(“xxx”) | primaryStage.setTitle(“xxx”) |
| setSize(800,600) | primaryStage.setWidth(800); primaryStage.setHeight(600) |
| setLocationRelativeTo(null) | primaryStage.centerOnScreen() |
| setDefaultCloseOperation(EXIT_ON_CLOSE) | // JavaFX 默认就是退出 |
| add(button) | pane.getChildren().add(button) (根据具体布局) |
| setLayout(new BorderLayout()) | root = new BorderPane() |
| JPanel | Pane / Region / VBox / HBox |
| pack() | // JavaFX 一般不用,布局自动计算 |
实际转换示例(JFrame → JavaFX)
// Swing 旧代码
public class MainFrame extends JFrame {
public MainFrame() {
setTitle("学生管理系统");
setS编程ize(900, 600);
setDefaultCloseOperation(EXIT_ON_CLOSE);
add(new MainPanel());
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new MainFrame();
}
}
// JavaFX 新代码(只需改这几行)
public class MainApp extends Application {
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("学生管理系统");
primaryStage.setWidth(900);
primaryStage.setHeight(600);
primaryStage.setScene(new Scene(new MainPanel()));
primaryStage.centerOnScreen();
primaryStage.show();
}
public static void main(String[] args) {
launch(args); // 必须这一行
}
}
迁移建议顺序(最快最不踩坑)
- 先把
JFrame主类改成继承Application,实现start(Stage) - 把所有
JPanel改成BorderPane/VBox(推荐从上到下用 VBox 搭积木式布局) - 全局替换
add(→getChildren().add( - 所有事件监听
addActionListener→setOnAction - 所有
SwingUtilities.invokeLater→Platform.runLater - 最后处理
JTable→TableView(最麻烦的一步,建议最后干)
总结
到此这篇关于JAVA项目swing转javafx语法规则以及示例代码的文章就介绍到这了,更多相关JAVA swing转javafx语法规则内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于JAVA项目swing转javafx语法规则以及示例代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!