我是一名Java开发人员,只是从Internet教程中学习。我正在学习全屏GUI应用程序。昨天有人告诉我,我不应该在程序中使用AWT,因为它已经过时了。我已经了解轻便和重量级的组件,主要问题是鼠标和键盘侦听器。为什么AWT过时了?如何在不使用AWT的情况下制作程序(向JComponents等添加侦听器)(什么样的Swing东西可以代替AWT)?
javax.swing.event
程序包中的20个以上的听众中饱餐一顿。;)
我是一名Java开发人员,只是从Internet教程中学习。我正在学习全屏GUI应用程序。昨天有人告诉我,我不应该在程序中使用AWT,因为它已经过时了。我已经了解轻便和重量级的组件,主要问题是鼠标和键盘侦听器。为什么AWT过时了?如何在不使用AWT的情况下制作程序(向JComponents等添加侦听器)(什么样的Swing东西可以代替AWT)?
javax.swing.event
程序包中的20个以上的听众中饱餐一顿。;)
Answers:
有一些很好的答案,但是我想介绍一个稍有不同的方面。Swing提供的功能超出了AWT。
Swing在某些程度上使用HTML支持在JEditorPane
&&中JTextPane
使用样式化文档JComponents
。AWT在任何组件中都不支持样式化文档。
AWT提供了一样,没有基于树的结构JTree
,没有表结构,例如JTable
,没有版本的JToolBar
。
JColorChooser
对于简单实用程序类- ,AWT没有等效项(我可以找到或调用),也没有等效项JOptionPane
。
如评论中所述,请参阅javax.swing.event
软件包中的20多个额外/替代侦听器。
可以在运行时将Swing组件设置为特定的外观,包括本地PLAF。
除了过多的AWT布局,Swing还提供:
BoxLayout
GroupLayout
OverlayLayout
ScrollPaneLayout
SpringLayout
ViewportLayout
UndoManager
用于可编辑文档中的撤消/重做功能。SwingWorker
用于响应式GUI。在简短的描述中,我可能会错过很多东西,但是最重要的是,Swing是一个全新的,功能更强大的GUI工具包。
Swing都建立在AWT的类上,并且在很大程度上依赖于它们。
这是一个小例子,可以演示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版本破坏了先前的代码,新的软件包取代了旧的软件包。