Я начинаю Java-разработчик, изучая только интернет-уроки. Я изучаю полноэкранные графические приложения. Вчера мне сказали, что я не должен использовать AWT в своих программах, потому что он устарел. Я уже знаю о легких и тяжеловесных компонентах, главная проблема - слушатели мыши и клавиатуры. Почему AWT устарел? Как сделать программу без AWT (добавление слушателей в JComponents и т.д.) (Какие вещи Swing могут заменить AWT)?
Java GUI-слушатели без AWT
Ответ 1
Вы неправильно интерпретируете предоставленную вам информацию. Вам следует избегать использования компонентов Swing с компонентами AWT . Хорошо использовать Swing с структурой слушателя AWT, менеджерами макетов и т.д., И на самом деле это невозможно.
Ответ 2
Были хорошие ответы, но я хотел бы затронуть несколько иной аспект. Вещи, которые Swing обеспечивает вне AWT.
Компоненты
Swing поддерживает стилизованные документы в JEditorPane
и JTextPane
и в ограниченной степени использует HTML в некотором другом JComponents
. AWT не поддерживает оформленные документы в любом компоненте.
AWT не поддерживает структуру дерева, такую как JTree
, не имеет табличной структуры, такой как JTable
, без версии JToolBar
.
AWT не имеет эквивалента (который я могу найти или вызвать) для JColorChooser
, а для простого класса утилиты - JOptionPane
.
Слушатели
Как упоминалось в комментарии, см. 20+ дополнительных/альтернативных слушателей в пакете javax.swing.event
.
Подключаемый взгляд и ощущение
Компоненты Swing могут быть настроены на определенный внешний вид во время выполнения, включая собственный PLAF.
Смотрите несколько снимков экрана в Вложенном примере макета для некоторых других образцов.
Макеты
В дополнение к множеству макетов AWT, Swing обеспечивает:
-
BoxLayout
-
GroupLayout
-
OverlayLayout
-
ScrollPaneLayout
-
SpringLayout
-
ViewportLayout
Другие
- Ключевые привязки. Подробнее см. Как использовать привязки клавиш.
-
UndoManager
для возможности отмены/повтора в редактируемых документах. - Inbuilt двойная буферизация, чтобы избежать мерцания при перерисовке.
-
SwingWorker
для гибких графических интерфейсов.
В этом кратком описании, возможно, гораздо больше я пропустил, но в итоге Swing - это еще более новый и расширенный инструментарий GUI.
Swing, оба строятся на и, сильно зависят от классов AWT.
Ответ 3
Java Swing использует ActionListeners, которые являются частью пакета AWT. Если вы хотите использовать качели, вы должны использовать какую-либо форму AWT ActionListener. Это все так. Я не предлагаю использовать Java вообще для сложных guis, но я бы не сказал, что AWT устарел, поскольку нет прямой замены. Таким образом, просто продолжайте использовать AWT.
В качестве альтернативы вы можете посмотреть JOGL, но это больше, если вы пытаетесь создать что-то ориентированное на игры.
Ответ 4
Это небольшой пример, который может продемонстрировать использование пакета 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);
}
}