如何在 Swing 應用程式中實現有效的後退和前進導航?
在Swing 中實現後退/前進按鈕
初始方法
初始方法初始方法
提供的程式碼利用堆疊管理螢幕導航。然而,它需要完善才能正常運作。問題在於change_display方法的實作。具體來說,在螢幕之間導航時可能會出現無限堆疊循環。單擊“後退”後,當前面板將被推入 previousPanels 堆棧,並在單擊“前進”時從forwardPanels 堆疊中檢索。然而,同一個面板可以重複地被推入兩個堆疊以及從兩個堆疊中彈出。以非線性方式存取螢幕時可能會發生這種情況。
import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Dimension; import java.awt.EventQueue; import java.awt.event.ActionEvent; import java.util.Random; import javax.swing.AbstractAction; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; /** @see http://stackoverflow.com/questions/5654926 */ public class CardPanel extends JPanel { private static final Random random = new Random(); private static final JPanel cards = new JPanel(new CardLayout()); private final String name; public CardPanel(String name) { this.name = name; this.setPreferredSize(new Dimension(320, 240)); this.setBackground(new Color(random.nextInt())); this.add(new JLabel(name)); } @Override public String toString() { return name; } public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { @Override public void run() { create(); } }); } private static void create() { JFrame f = new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); for (int i = 1; i < 9; i++) { CardPanel p = new CardPanel("Panel " + String.valueOf(i)); cards.add(p, p.toString()); } JPanel control = new JPanel(); control.add(new JButton(new AbstractAction("\u22b2Prev") { @Override public void actionPerformed(ActionEvent e) { CardLayout cl = (CardLayout) cards.getLayout(); cl.previous(cards); } })); control.add(new JButton(new AbstractAction("Next\u22b3") { @Override public void actionPerformed(ActionEvent e) { CardLayout cl = (CardLayout) cards.getLayout(); cl.next(cards); } })); f.add(cards, BorderLayout.CENTER); f.add(control, BorderLayout.SOUTH); f.pack(); f.setLocationRelativeTo(null); f.setVisible(true); } }
使用 CardLayout 的替代方法
為了解決基於堆疊的方法的問題,有一種替代解決方案建議使用CardLayout。 CardLayout 允許在單一容器內有效管理多個面板。每個面板都分配有一個唯一的識別符作為其名稱。在面板之間導航時,可以使用 CardLayout 來使用其名稱作為鍵切換到所需的面板。 這是使用 CardLayout 的實作:在此實作中, CardPanel 類別代表各個螢幕。每個螢幕都有一個唯一的名稱,與其在 CardLayout 中的按鍵相對應。卡片面板利用 CardLayout 並顯示與目前卡片相對應的螢幕。 導覽按鈕(標記為「上一頁」和「下一頁」)位於控制台中。這些按鈕調用動作以在卡片序列中前進或後退。 這種方法提供了更直觀和穩定的導航體驗,消除了與基於堆疊的實作相關的潛在問題。以上是如何在 Swing 應用程式中實現有效的後退和前進導航?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

在使用IntelliJIDEAUltimate版本啟動Spring...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
