Java GUI écouteurs sans AWT

Je suis un développeur Java débutant, apprenant uniquement à partir de didacticiels sur Internet. J’apprends des applications d’interface graphique en plein écran. On m’a dit hier que je ne devrais pas utiliser AWT dans mes programmes, car il est obsolète. Je connais déjà les composants légers et lourds, le problème principal est les auditeurs de la souris et du clavier. Pourquoi AWT est-il obsolète? Comment faire un programme sans AWT (en ajoutant des écouteurs à JComponents, etc.)

Vous interprétez mal les informations qui vous sont données. Vous devez éviter d’utiliser des composants Swing avec des composants AWT. C’est bien d’utiliser Swing avec la structure de l’auditeur AWT, les gestionnaires de disposition, etc. En fait, c’est impossible de ne pas le faire.

Il y a eu de bonnes réponses, mais j’aimerais aborder un aspect légèrement différent. Choses que Swing fournit au-delà de AWT.

Composants

Swing prend en charge les documents JEditorPane dans JEditorPane & JTextPane et, dans une mesure limitée, en utilisant du HTML dans d’autres JComponents . AWT ne prend en charge aucun document de style dans aucun composant.

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

AWT n’a pas d’équivalent (que je puisse trouver ou rappeler) pour JColorChooser et aucun pour la classe d’utilitaire simple – JOptionPane .

Les auditeurs

Comme mentionné dans un commentaire, consultez les 20 écouteurs supplémentaires / alternatifs dans le package javax.swing.event .

Apparence enfichable

Les composants Swing peuvent être configurés pour une apparence particulière au moment de l’exécution, y compris un PLAF natif.

Reportez-vous aux captures d’écran de l’ exemple de disposition nestede pour d’autres exemples.

Mises en page

En plus de la multitude de configurations AWT, Swing fournit:

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

Autre

  • Raccourcis clavier. Reportez-vous à Comment utiliser les liaisons de touches pour plus de détails.
  • UndoManager pour la fonction annuler / UndoManager dans les documents modifiables.
  • Double tampon intégré pour éviter le scintillement lors du repeindre.
  • SwingWorker pour les interfaces graphiques réactives.

Il y a probablement beaucoup plus de choses qui me manquent dans cette brève description, mais l’essentiel est que Swing est une boîte à outils graphique plus récente et plus activée.

Swing s’appuie sur les classes de l’AWT et en dépend fortement.

Java Swing utilise ActionListeners, qui font partie du package AWT. Si vous souhaitez utiliser le swing, vous devez utiliser une forme d’AWT ActionListener. C’est comme ça que ça se passe. Je ne suggère pas d’utiliser Java du tout pour guis complexe, mais je ne dirais pas non plus qu’AWT est obsolète, car il n’y a pas de remplacement direct. Alors, allez-y et utilisez AWT.

Comme alternative, vous pourriez regarder dans JOGL, mais c’est plus si vous essayez de créer quelque chose de axé sur le jeu.

Ceci est un petit exemple qui peut démontrer, l’utilisation du paquet javax.swing.Action , vous devriez également vous référer à java doc pour le paquet javax.swing.event je pense que vous trouvez cela. . .

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

Tu as raison. Java AWT et Java Spring sont tous deux obsolètes. Utilisez plutôt JavaFX.
Et, en commentaire, je suis frustré par Java, qui était censé être “une fois en cours d’exécution partout”, maintenant il s’avère “doit continuer à réécrire votre application tous les trois mois” car les nouvelles versions de Java rompent le code précédent, et les nouveaux paquets remplacent l’ancien.