88 votes

Écoute de l'interface graphique Swing sans AWT

Je suis un développeur Java débutant, qui apprend uniquement à partir de tutoriels sur Internet. J'apprends les applications GUI plein écran. On m'a dit hier que je ne devrais pas utiliser AWT dans mes programmes parce qu'il est dépassé. Je connais déjà les composants légers et lourds, mais le principal problème est l'écoute de la souris et du clavier. Pourquoi AWT est-il dépassé ?

Comment réaliser un programme sans AWT (en ajoutant des récepteurs à un JComponent etc.) Quels sont les éléments Swing qui peuvent remplacer l'AWT ?

0 votes

Je n'ai jamais entendu parler d'autres auditeurs que ceux de l'AWT. Il serait bon de le savoir moi-même.

3 votes

@Nideo : Régalez vos oreilles avec les 20+ auditeurs de la javax.swing.event paquet . ;)

0 votes

@Andrew, merci ! :P Y a-t-il une raison d'utiliser des listeners swing plutôt que des listeners AWT ?

43voto

Hovercraft Full Of Eels Points 161146

Vous interprétez mal les informations qui vous sont données. Vous devez éviter d'utiliser des composants Swing avec AWT composants . Il est possible d'utiliser Swing avec la structure d'écoute AWT, les gestionnaires de mise en page, etc. et en fait il est impossible de ne pas le faire.

36voto

Andrew Thompson Points 108505

Il y a eu de bonnes réponses, mais je voudrais aborder un aspect légèrement différent. Ce que Swing apporte de plus qu'AWT.

Composants

Swing prend en charge les documents stylisés dans JEditorPane & JTextPane et, dans une certaine mesure, l'utilisation de HTML dans d'autres domaines. JComponents . AWT ne prend en charge les documents stylisés dans aucun composant.

AWT ne fournit pas de structure arborescente comme JTree aucune structure tabulaire telle que JTable aucune version de JToolBar .

AWT n'a pas d'équivalent (que je sache ou que je me souvienne) pour la fonction JColorChooser & aucun pour la classe utilitaire simple - JOptionPane .

Les auditeurs

Comme indiqué dans un commentaire, voir les plus de 20 auditeurs supplémentaires/alternatifs dans la rubrique javax.swing.event l'emballage.

Look & Feel enfichable

Les composants Swing peuvent être configurés en fonction d'une apparence et d'une convivialité particulières au moment de l'exécution, y compris un PLAF natif.

Voir les captures d'écran sur le site Exemple de mise en page imbriquée pour obtenir d'autres échantillons.

Modèles

En plus de la pléthore de présentations AWT, Swing fournit :

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

Autres


J'ai probablement oublié beaucoup d'autres choses dans cette brève description, mais l'essentiel est que Swing est une boîte à outils d'interface graphique plus récente et plus performante.

La balançoire est construite sur les deux, et s'appuie fortement sur les classes de l'AWT.

7voto

MirroredFate Points 2440

Swing de Java utilise des ActionListeners, qui font partie du paquet AWT. Si vous souhaitez utiliser Swing, vous devez utiliser une forme ou une autre d'ActionListener AWT. C'est ainsi que les choses se passent. Je ne suggère pas du tout l'utilisation de Java pour les guis complexes, mais je ne dirais pas non plus que AWT est dépassé, car il n'y a pas de remplacement direct. Il faut donc continuer à utiliser AWT.

Comme alternative, vous pouvez regarder JOGL, mais c'est plus si vous essayez de créer quelque chose orienté vers le jeu.

2voto

Harshit Thacker Points 11

Il s'agit d'un petit exemple qui peut démontrer l'utilisation de javax.swing.Action paquet vous devriez également vous référer à la documentation de java pour javax.swing.event paquet Je pense que vous constatez que

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);
    }
}

1voto

Baruch Atta Points 89

Vous avez raison. Java AWT et Java Spring sont tous deux obsolètes. Utilisez plutôt JavaFX.
Et, en guise de commentaire, je suis frustré par Java, qui était censé être "write once run everywhere" (écrire une fois et exécuter partout), alors qu'il s'avère maintenant être "must keep rewriting your app every three months" (devoir réécrire votre application tous les trois mois) parce que les nouvelles versions de Java cassent le code précédent, et que de nouveaux paquets remplacent l'ancien.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X