java swing → javafx 项目迁移时,语法/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 + 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 线程里 |
| 启动方式 | ||
| public 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("学生管理系统");
setsize(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语法规则内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论