Java GUI слушатели без AWT
Я начинающий разработчик Java, учась только из интернет-учебников. Я изучаю полноэкранные приложения GUI. Вчера мне сказали, что я не должен использовать AWT в своих программах, потому что он устарел. Я уже знаю о легких и тяжеловесных компонентах, основная проблема-прослушиватели мыши и клавиатуры. Почему AWT устарел? Как сделать программу без AWT (добавление слушателей в JComponents и т. д.) (Какие качели могут заменить AWT)?
5 ответов
вы неправильно интерпретируете предоставленную вам информацию. Вы должны избегать использования компонентов Swing с AWT компоненты. Можно использовать Swing со структурой прослушивателя AWT, менеджерами макетов и т. д. и на самом деле это невозможно.
были некоторые хорошие ответы, но я хотел бы охватить немного другой аспект. Вещи, которые Swing обеспечивает за AWT.
компоненты
Swing поддерживает стилизованные документы в JEditorPane
& JTextPane
& в ограниченной степени с использованием HTML в некоторых других JComponents
. AWT не поддерживает стилизованные документы ни в одном компоненте.
AWT не предоставляет древовидной структуры, такой как JTree
, нет табличной структуры, такой как JTable
версия JToolBar
.
AWT не имеет эквивалента (который я могу найти или вспомнить) для JColorChooser
& none для простого служебного класса -JOptionPane
.
слушатель
как упоминалось в комментарии, см. 20 + дополнительных / альтернативных слушателей в .
Разъемный Выглядеть И Чувствовать Себя
компоненты качания можно установить к определенному взгляду & чывству на времени выполнения, включая родной ПЛАФ.
см. снимки экрана на Пример Вложенного Макета дополнительные образцы.
макеты
в дополнение к множеству макетов AWT, Swing обеспечивает:
BoxLayout
GroupLayout
OverlayLayout
ScrollPaneLayout
SpringLayout
ViewportLayout
другое
- ключ Фурнитура. См.как использовать привязки клавиш для сведения.
-
UndoManager
для возможности отмены / повтора в редактируемых документах. - встроенный двойная буферизация чтобы избежать мерцания при перекраске.
-
SwingWorker
для отзывчивых GUIs.
вероятно, в этом кратком описании я пропустил гораздо больше, но суть в том, что Swing является совершенно новым и более включенным GUI toolkit.
качели оба строит на,и сильно зависит от классов в AWT.
Java Swing принимает ActionListeners, которые являются частью пакета AWT. Если вы хотите использовать swing, вы должны использовать какую-то форму AWT ActionListener. Просто так обстоят дела. Я не предлагаю использовать Java вообще для сложных guis, но и не сказал бы, что AWT устарел, так как нет прямой замены. Таким образом, просто идите вперед и используйте AWT.
в качестве альтернативы вы можете посмотреть на JOGL, но это больше, если вы пытаетесь создать что-то ориентированное на игру.
Это небольшой пример, который может продемонстрировать использование javax.качать.Действие вы также должны обратиться к Java doc для javax.качать.событие пакет я думаю, что вы находите это . . .
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 ломают предыдущий код, а новые пакеты заменяют старый.