Swing-GUI-Listener ohne AWT

Lesezeit: 4 Minuten

Benutzer-Avatar
Verstecken

Ich bin ein beginnender Java-Entwickler und lerne nur aus Internet-Tutorials. Ich lerne Vollbild-GUI-Anwendungen. Mir wurde gestern gesagt, dass ich AWT nicht in meinen Programmen verwenden sollte, weil es veraltet ist. Ich kenne mich bereits mit leichten und schweren Komponenten aus, das Hauptproblem sind die Maus- und Tastaturhörer. Warum ist AWT veraltet?

So erstellen Sie ein Programm ohne AWT (Hinzufügen von Zuhörern zu einer JComponent etc)? Welche Art von Swing-Dingen kann das AWT ersetzen?

  • Ich habe noch nie von anderen Zuhörern als AWT gehört. Wäre schön es selbst zu wissen.

    – Schuppentier

    6. Juni 2011 um 16:37 Uhr

  • @Nideo: Verwöhnen Sie Ihre ‘Ohren’ mit den über 20 Zuhörern in der javax.swing.event Paket. 😉

    – Andrew Thompson

    6. Juni 2011 um 17:15 Uhr


  • @Andreas, danke! 😛 Gibt es einen Grund, lieber Swing-Hörer als AWT-Hörer zu verwenden?

    – Schuppentier

    6. Juni 2011 um 17:34 Uhr

Sie interpretieren die Ihnen gegebenen Informationen falsch. Sie sollten es vermeiden, Swing-Komponenten mit AWT zu verwenden Komponenten. Es ist in Ordnung, Swing mit der AWT-Listener-Struktur, Layout-Managern usw. zu verwenden, und es ist tatsächlich unmöglich, dies nicht zu tun.

Benutzer-Avatar
Andreas Thompson

Es gab einige gute Antworten, aber ich möchte einen etwas anderen Aspekt behandeln. Dinge, die Swing über AWT hinaus bietet.

Komponenten

Swing unterstützt formatierte Dokumente in JEditorPane & JTextPane & in begrenztem Umfang HTML in einem anderen verwenden JComponents. AWT unterstützt in keiner Komponente formatierte Dokumente.

AWT bietet keine baumbasierte Struktur wie JTreekeine tabellarische Struktur wie z JTablekeine Version von JToolBar.

1646787426 327 Java GUI Listener ohne AWT

AWT hat kein Äquivalent (das ich finden oder abrufen kann) für JColorChooser & keine für die einfache Gebrauchsklasse – JOptionPane.

1646787426 301 Java GUI Listener ohne AWT

Zuhörer

Wie in einem Kommentar erwähnt, siehe die über 20 zusätzlichen/alternativen Zuhörer in der javax.swing.event Paket.

Pluggable Look & Feel

Swing-Komponenten können zur Laufzeit auf ein bestimmtes Look & Feel eingestellt werden, einschließlich eines nativen PLAF.

1644251293 277 Swing Rendering scheint in JDK 18 fehlerhaft zu sein korrekt in

Weitere Beispiele finden Sie in den Screenshots des verschachtelten Layoutbeispiels.

Grundrisse

Zusätzlich zu der Fülle von AWT-Layouts bietet Swing:

  1. BoxLayout
  2. GroupLayout
  3. OverlayLayout
  4. ScrollPaneLayout
  5. SpringLayout
  6. ViewportLayout

Sonstiges


Es gibt wahrscheinlich noch viel mehr, was ich in dieser kurzen Beschreibung vermisst habe, aber unterm Strich ist Swing ein insgesamt neueres und leistungsfähigeres GUI-Toolkit.

Schwingen Sie beide baut auf, und stützt sich stark auf Klassen in der AWT.

Javas Swing verwendet ActionListener, die Teil des AWT-Pakets sind. Wenn Sie Swing verwenden möchten, müssen Sie eine Art AWT-ActionListener verwenden. So sind die Dinge eben. Ich schlage überhaupt nicht vor, Java für komplexe GUIs zu verwenden, aber ich würde auch nicht sagen, dass AWT veraltet ist, da es keinen direkten Ersatz gibt. Machen Sie also einfach weiter und verwenden Sie AWT.

Als Alternative könnten Sie sich JOGL ansehen, aber das ist eher, wenn Sie versuchen, etwas Spielorientiertes zu erstellen.

Dies ist ein kleines Beispiel, das die Verwendung von demonstrieren kann javax.swing.Action Paket finden Sie auch in der Java-Dokumentation javax.swing.event Paket Ich denke, Sie finden das. . .

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JToolBar;

class SysOutHelloAction extends AbstractAction {
    private static final Icon printIcon = new ImageIcon("Print.gif");

    SysOutHelloAction() {
        super("Print", printIcon);
        putValue(Action.SHORT_DESCRIPTION, "Hello, World");
    }

    public void actionPerformed(ActionEvent actionEvent) {
        System.out.println("Hello, World");
    }
}

public class SwingActionTester {
    public static void main(String args[]) {
        JFrame frame = new JFrame("Action Sample");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        final Action printAction = new SysOutHelloAction();
        JMenuBar menuBar = new JMenuBar();
        JMenu menu = new JMenu("File");
        menuBar.add(menu);
        menu.add(new JMenuItem(printAction));
        JToolBar toolbar = new JToolBar();
        toolbar.add(new JButton(printAction));
        JButton enableButton = new JButton("Enable");
        ActionListener enableActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.setEnabled(true);
            }
        };
        enableButton.addActionListener(enableActionListener);
        JButton disableButton = new JButton("Disable");
        ActionListener disableActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.setEnabled(false);
            }
        };
        disableButton.addActionListener(disableActionListener);
        JButton relabelButton = new JButton("Relabel");
        ActionListener relabelActionListener = new ActionListener() {
            public void actionPerformed(ActionEvent actionEvent) {
                printAction.putValue(Action.NAME, "Changed Action Value");
            }
        };
        relabelButton.addActionListener(relabelActionListener);
        JPanel buttonPanel = new JPanel();
        buttonPanel.add(enableButton);
        buttonPanel.add(disableButton);
        buttonPanel.add(relabelButton);
        frame.setJMenuBar(menuBar);
        frame.add(toolbar, BorderLayout.SOUTH);
        frame.add(buttonPanel, BorderLayout.NORTH);
        frame.setSize(300, 200);
        frame.setVisible(true);
    }
}

Sie haben Recht. Sowohl Java AWT als auch Java Spring sind veraltet. Verwenden Sie stattdessen JavaFX.
Und, als Kommentar, ich bin frustriert über Java, dass es “einmal schreiben, überall ausführen” sein sollte, wenn es sich jetzt herausstellt, “muss Ihre App alle drei Monate neu schreiben”, weil neue Java-Versionen vorherigen Code brechen, und neue Pakete ersetzen die alten.

1015440cookie-checkSwing-GUI-Listener ohne AWT

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy