JAVA項目swing轉(zhuǎn)javafx語法規(guī)則以及示例代碼
Java Swing → JavaFX 項目遷移時,語法/API 的轉(zhuǎn)換規(guī)則幾乎是“一對一可查表”的。下面把你 90% 會碰到的轉(zhuǎn)換直接列成表格,照著改就行,基本不需要動邏輯。
| Swing(舊) | JavaFX(新) | 轉(zhuǎn)換規(guī)則 + 備注 |
|---|---|---|
| 主類繼承 | ||
| extends JFrame | extends Application | 必須重寫 start(Stage primaryStage) |
| 窗口創(chuàng)建 | ||
| new JFrame(“標(biāo)題”) | new Stage() + primaryStage.setTitle(“標(biāo)題”) | JavaFX 用 Stage 代替 JFrame |
| frame.setDefaultCloseOperation(EXIT_ON_CLOSE) | primaryStage.setOnCloseRequest(e -> System.exit(0)) | 或直接不寫,默認(rèn)關(guān)閉就是退出 |
| 布局管理器 | ||
| 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 實現(xiàn)單選 |
| JComboBox | ComboBox | 一樣,但泛型更強 |
| JList | ListView | 一樣 |
| JTable | TableView + TableColumn | 最大差異!需要定義實體類 + PropertyValueFactory |
| JScrollPane | ScrollPane | 用法一樣 |
| JMenuBar / JMenu / JMenuItem | MenuBar / Menu / MenuItem | 基本一樣 |
| JFileChooser | FileChooser | API 略有不同,但功能一致 |
| JDialog | Stage + Modality | 模態(tài)對話框用 new Stage(StageStyle.UTILITY) + initModality(Modality.APPLICATION_MODAL) |
| 事件監(jiān)聽 | ||
| 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); } | 必須調(diào)用 Application.launch(),不能自己 new |
| 圖標(biāo) | ||
| 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 代碼(復(fù)制粘貼) |
|---|---|
| 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 默認(rèn)就是退出 |
| add(button) | pane.getChildren().add(button) (根據(jù)具體布局) |
| setLayout(new BorderLayout()) | root = new BorderPane() |
| JPanel | Pane / Region / VBox / HBox |
| pack() | // JavaFX 一般不用,布局自動計算 |
實際轉(zhuǎn)換示例(JFrame → JavaFX)
// Swing 舊代碼
public class MainFrame extends JFrame {
public MainFrame() {
setTitle("學(xué)生管理系統(tǒng)");
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("學(xué)生管理系統(tǒng)");
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,實現(xiàn)start(Stage) - 把所有
JPanel改成BorderPane/VBox(推薦從上到下用 VBox 搭積木式布局) - 全局替換
add(→getChildren().add( - 所有事件監(jiān)聽
addActionListener→setOnAction - 所有
SwingUtilities.invokeLater→Platform.runLater - 最后處理
JTable→TableView(最麻煩的一步,建議最后干)
總結(jié)
到此這篇關(guān)于JAVA項目swing轉(zhuǎn)javafx語法規(guī)則以及示例代碼的文章就介紹到這了,更多相關(guān)JAVA swing轉(zhuǎn)javafx語法規(guī)則內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java Swing SpringLayout彈性布局的實現(xiàn)代碼
這篇文章主要介紹了Java Swing SpringLayout彈性布局的實現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12
Spring Security添加二次認(rèn)證的項目實踐
在用戶自動登錄后,可以通過對密碼進行二次校驗進而確保用戶的真實性,本文就來介紹一下Spring Security添加二次認(rèn)證的項目實踐,具有一定的參考價值,感興趣的可以了解一下2023-12-12
如何在SpringBoot+Freemarker中獲取項目根目錄
這篇文章主要介紹了如何在SpringBoot+Freemarker中獲取項目根目錄的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
如何在 Spring Boot 中實現(xiàn) FreeMarker 模板
FreeMarker 是一種功能強大、輕量級的模板引擎,用于在 Java 應(yīng)用中生成動態(tài)文本輸出(如 HTML、XML、郵件內(nèi)容等),本文給大家介紹在 Spring Boot 中實現(xiàn) FreeMarker 模板的示例,感興趣的朋友一起看看吧2025-04-04
基于SpringBoot整合SSMP案例(開啟日志與分頁查詢條件查詢功能實現(xiàn))
這篇文章主要介紹了基于SpringBoot整合SSMP案例(開啟日志與分頁查詢條件查詢功能實現(xiàn)),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋參考下吧2023-11-11

