Heim > Java > javaLernprogramm > Wie implementiert man eine effektive Vor- und Zurück-Navigation in einer Swing-Anwendung?

Wie implementiert man eine effektive Vor- und Zurück-Navigation in einer Swing-Anwendung?

Barbara Streisand
Freigeben: 2024-12-26 15:24:10
Original
473 Leute haben es durchsucht

How to Implement Effective Back and Forward Navigation in a Swing Application?

Implementierung der Zurück-/Vorwärts-Schaltflächen in Swing

Erster Ansatz

Der bereitgestellte Code nutzt Stapel um die Bildschirmnavigation zu verwalten. Es bedarf jedoch einer Verfeinerung, um ordnungsgemäß zu funktionieren. Das Problem liegt in der Implementierung der Methode change_display. Insbesondere besteht die Möglichkeit einer Endlosstapelschleife beim Navigieren zwischen Bildschirmen. Wenn Sie auf „Zurück“ klicken, wird das aktuelle Panel auf den previousPanels-Stapel verschoben und beim Klicken auf „Weiter“ aus dem forwardPanels-Stapel abgerufen. Es ist jedoch möglich, dass das gleiche Paneel wiederholt auf beide Stapel geschoben und von beiden Stapeln abgehoben wird. Dieses Szenario kann auftreten, wenn Bildschirme auf nichtlineare Weise aufgerufen werden.

Alternativer Ansatz mit CardLayout

Um die Probleme mit dem stapelbasierten Ansatz zu beheben, gibt es eine alternative Lösung Es wird vorgeschlagen, CardLayout zu verwenden. CardLayout ermöglicht die effiziente Verwaltung mehrerer Panels in einem einzigen Container. Jedem Panel wird eine eindeutige Kennung zugewiesen, die als Name fungiert. Beim Navigieren zwischen Panels kann das CardLayout verwendet werden, um mit seinem Namen als Schlüssel zum gewünschten Panel zu wechseln.

Hier ist eine Implementierung mit CardLayout:

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);
    }
}
Nach dem Login kopieren

In dieser Implementierung wird das Die CardPanel-Klasse repräsentiert einzelne Bildschirme. Jeder Bildschirm hat einen eindeutigen Namen, der seinem Schlüssel im CardLayout entspricht. Das Kartenfeld nutzt das CardLayout und zeigt den Bildschirm an, der der aktuellen Karte entspricht.

Die Schaltflächen für die Navigation (beschriftet mit „Zurück“ und „Weiter“) befinden sich im Bedienfeld. Diese Schaltflächen rufen Aktionen auf, um durch die Kartensequenz vor- oder zurückzulaufen.

Dieser Ansatz bietet ein intuitiveres und stabileres Navigationserlebnis und eliminiert die potenziellen Probleme, die mit der stapelbasierten Implementierung verbunden sind.

Das obige ist der detaillierte Inhalt vonWie implementiert man eine effektive Vor- und Zurück-Navigation in einer Swing-Anwendung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage