Java GUI-слушатели без AWT

Я начинаю Java-разработчик, изучая только из интернет-уроков. Я изучаю полноэкранные графические приложения. Вчера мне сказали, что я не должен использовать AWT в своих программах, потому что он устарел. Я уже знаю о легких и тяжеловесных компонентах, главная проблема – слушатели мыши и клавиатуры. Почему AWT устарел? Как сделать программу без AWT (добавление слушателей в JComponents и т. Д.) (Какие вещи Swing могут заменить AWT)?

    5 Solutions collect form web for “Java GUI-слушатели без AWT”

    Вы неправильно интерпретируете предоставленную вам информацию. Вам следует избегать использования компонентов Swing с компонентами AWT. Вполне нормально использовать Swing со структурой прослушивания AWT, менеджерами макетов и т. Д., И на самом деле это невозможно.

    Были хорошие ответы, но я хотел бы затронуть несколько иной аспект. Вещи, которые Swing обеспечивает вне AWT.

    Компоненты

    Swing поддерживает оформленные документы в JEditorPane & JTextPane и в ограниченной степени использует HTML в некоторых других JComponents . AWT не поддерживает оформленные документы в любом компоненте.

    AWT не поддерживает структуру JTree , такую ​​как JTable , не имеет табличной структуры, такой как JTable , без версии JToolBar .

    AWT не имеет эквивалента (который я могу найти или вспомнить) для JColorChooser & none для простого classа утилиты – JOptionPane .

    Слушатели

    Как упоминалось в комментарии, см. 20+ дополнительных / альтернативных слушателей в пакете javax.swing.event .

    Вставной взгляд и ощущение

    Компоненты Swing могут быть настроены на определенный внешний вид во время выполнения, включая собственный PLAF.

    См. Скриншоты в примере вложенного макета для некоторых других образцов.

    Макеты

    В дополнение к множеству макетов AWT, Swing обеспечивает:

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

    Другие

    • Ключевые привязки. Подробнее см. Как использовать привязки клавиш .
    • UndoManager для отмены / повторного использования в редактируемых документах.
    • Встроенная двойная буферизация, чтобы избежать мерцания при перерисовке.
    • SwingWorker для SwingWorker графических интерфейсов.

    В этом кратком описании, вероятно, гораздо больше я пропустил, но суть в том, что Swing – это совсем новый и расширенный инструментарий GUI.

    Качели оба строят дальше и в значительной степени зависят от classов в AWT.

    Java Swing использует ActionListeners, которые являются частью пакета AWT. Если вы хотите использовать swing, вы должны использовать какую-либо форму AWT ActionListener. Это все так. Я не предлагаю использовать Java вообще для сложных guis, но я бы не сказал, что AWT устарел, поскольку нет прямой замены. Таким образом, просто продолжайте использовать AWT.

    В качестве альтернативы вы могли бы изучить JOGL, но это больше, если вы пытаетесь создать что-то ориентированное на игры.

    Это небольшой пример, который может продемонстрировать, использование пакета javax.swing.Action вы также должны обратиться к java doc для пакета javax.swing.event. Думаю, вы это нашли. , ,

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

    Ты прав. Как Java AWT, так и Java Spring устарели. Вместо этого используйте JavaFX.
    И, как комментарий, я расстроен Java, что он должен был «писать раз подряд везде», когда теперь оказывается, что «нужно постоянно переписывать приложение каждые три месяца», потому что новые выпуски Java прерывают предыдущий код, и новые пакеты заменяют старые.

    Interesting Posts

    Почему я не получаю ошибку сегментации, когда пишу за пределами массива?

    Android – локальное изображение в webview

    Ярлык клавиатуры для увеличения текущего окна / приложения в OSX

    Обмен данными между AppDomains

    Масштабирование водяного знака по размеру видео с помощью ffmpeg

    Как решить проблему с неизвестной сетью? Он не может подключиться к Интернету

    Dash или Slash в пакетном файле?

    База данных Android заблокирована

    Создайте PDF-файл из PowerPoint с анимацией

    О настройках MTU в машинах и коммутаторе

    Разница между «char» и «String» в Java

    Автоматически отклонять попытки взлома в CentOS?

    Можно ли загружать Vista из vhd с помощью диспетчера загрузки Windows 7?

    Каковы все функции-члены, созданные компилятором для classа? Это происходит постоянно?

    Что именно делает планировщик QoS-пакетов? Каковы конкретные реальные причины для его включения?

    Давайте будем гением компьютера.