没有AWT的Java GUI侦听器
我是一名首发的Java开发人员,仅从互联网教程学习。 我正在学习全屏GUI应用程序。 我昨天被告知,我不应该在我的程序中使用AWT,因为它已经过时了。 我已经知道轻量级和重量级的组件,主要问题是鼠标和键盘的监听器。 为什么AWT过时了? 如何使一个没有AWT的程序(将监听器添加到JComponents等)(什么样的Swing的东西可以代替AWT)?
你错误地解释给你的信息。 您应该避免使用带有AWT 组件的 Swing 组件 。 在AWT监听器结构,布局pipe理器等等中使用Swing是可以的,事实上它是不可能的。
已经有了一些很好的答案,但我想涵盖一个稍微不同的方面。 Swing提供超越AWT的东西。
组件
Swing在JEditorPane
& JTextPane
支持样式化的文档,并在一定程度上使用其他一些JComponents
HTML。 AWT不支持任何组件中的样式文档。
AWT不提供像JTree
这样的基于树的结构,也不提供JTable
等表格结构,也没有JToolBar
版本。
AWT对于JColorChooser
没有相同的(我可以find或回想起来),对于简单的实用工具类( JOptionPane
。
听众
如注释中所述,请参阅javax.swing.event
包中的20多个额外/替代侦听器。
可插入的外观和感觉
Swing组件可以在运行时设置为特定的外观和感觉,包括本地PLAF。
有关更多示例 ,请参阅嵌套布局示例上的屏幕截图。
布局
除了大量的AWT布局之外,Swing还提供:
-
BoxLayout
-
GroupLayout
-
OverlayLayout
-
ScrollPaneLayout
-
SpringLayout
-
ViewportLayout
其他
- 键绑定。 有关详细信息,请参阅如何使用密钥绑定 。
- 在可编辑的文档中使用
UndoManager
来撤消/重做。 - 内置双缓冲 ,避免重画闪烁。
-
SwingWorker
响应式graphics用户界面。
在这个简短的描述中,我可能错过了很多东西,但最重要的是,Swing是一个全新的,function更强大的GUI工具包。
Swing的构build依赖于AWT中的类, 并依赖于这些类。
Java的Swing需要ActionListeners,这是AWT包的一部分。 如果你想使用swing,你必须使用某种forms的AWT ActionListener。 事情就是这样。 我并不build议为复杂的guis使用Java,但我也不会说AWT已经过时了,因为没有直接replace。 因此,请继续使用AWT。
作为一种select,你可以研究JOGL,但更多的是如果你正在尝试创build一些面向游戏的东西。
这是一个可以演示的小例子,使用javax.swing.Action包你也应该参考java doc for 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); } }