首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 程式設計入門

Swing 界面跳轉優雅實現:告別 600 行硬編碼

     編輯:Java 程式設計入門

假設系統界面基於 javax.swing 構建,基礎容器是 BaseView,它僅包含一個 JPanel,該面板承載所有 Swing 元件(JButton、JLabel 等)。業務需求常要求:完成當前界面操作自動跳轉到下一個,完成後又能跳回。這在實現過程中常成為效率殺手——見過有人用 600 行代碼判斷上一個界面是哪個,只因太多界面都能跳到當前界面。

常見但糟糕的做法

在下一個界面類中包含指向上一個界面的變量?這不方便,還增加依賴性,對軟體不利。

優雅解法:基於基類的統一導航

以下用簡化模型闡述。

1. 基礎視圖類

public abstract class BaseView extends JWindow {
    // 實現獲取界面元件、資訊的方法
}

2. 具體界面類

public class MyView extends BaseView {
    JPanel myPanel;
    public void playoutPanel() {
        JButton myButton = new JButton("OK");
        myPanel.add(myButton);
        // 添加所需元件與佈局
    }
}

3. 跳轉邏輯重構

假設 OneView、TwoView、ThreeView 處理完操作都需跳轉到 MyView,而 MyView 的 OK 按鈕需返回原界面。

原臃腫代碼需在 MyView 添加 BaseView anyView 存儲來源界面,跳轉代碼:

public void jump() {
    MyView myView = new MyView();
    myView.anyView = this;
    this.remove(this.xxPanel);
    this.add(myView.getPanel());
    this.repaint();
}

返回時卻不容易,否則不會寫 600 行:

public void goBack() {
    if (anyView instanceof OneView) {
        anyView.remove(this.myView);
        OneView ov = (OneView) anyView;
        anyView.add(ov.getPanel());
        anyView.repaint();
    }
    if (anyView instanceof TwoView) { ... }
    ...
}

大量 instanceof 判斷與轉型,編譯依賴性極強,效率低下。

核心思想:責任轉移給基類

在 BaseView 中定義統一的跳轉協議:

  • 提供 navigateTo(BaseView target) 方法處理面板切換
  • 內部維護導航堆疊,自動記錄返回點
  • 子類只需關注自身業務邏輯,調用 goBack() 即可返回

這樣消除了具體界面間的直接耦合,新增界面無需修改現有代碼,完美符合開閉原則。具體實現可參考「命令模式」或「狀態模式」管理導航狀態。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved