此Java教程是为JDK 8编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息,请参阅JDK发行说明。
使用组件化架构设计的应用程序可以开发为Java小程序。以具有基于Swing的图形用户界面(GUI)的Java小程序为例。使用组件化设计,GUI可以使用较小的构建块或组件构建。以下是创建小程序GUI的一般步骤:
MyTopJPanel
的类,该类是javax.swing.JPanel
的子类。在MyTopJPanel
类的构造函数中布局小程序的GUI组件。MyApplet
的类,该类是javax.swing.JApplet
的子类。MyApplet
的init
方法中,实例化MyTopJPanel
并将其设置为小程序的内容面板。以下部分通过使用动态树示例小程序详细探讨了这些步骤。如果您对Swing不熟悉,请参阅使用Swing创建GUI以了解有关使用Swing GUI组件的更多信息。
JPanel
类创建一个类,该类是JPanel
的子类。这个顶级JPanel
作为所有其他UI组件的容器。在下面的示例中,DynamicTreePanel
类是最顶层的JPanel
。DynamicTreePanel
类的构造函数调用其他方法来正确创建和布局UI控件。
public class DynamicTreePanel extends JPanel implements ActionListener { private int newNodeSuffix = 1; private static String ADD_COMMAND = "add"; private static String REMOVE_COMMAND = "remove"; private static String CLEAR_COMMAND = "clear"; private DynamicTree treePanel; public DynamicTreePanel() { super(new BorderLayout()); //创建组件。 treePanel = new DynamicTree(); populateTree(treePanel); JButton addButton = new JButton("添加"); addButton.setActionCommand(ADD_COMMAND); addButton.addActionListener(this); JButton removeButton = new JButton("删除"); // ... JButton clearButton = new JButton("清除"); // ... //布局所有内容。 treePanel.setPreferredSize( new Dimension(300, 150)); add(treePanel, BorderLayout.CENTER); JPanel panel = new JPanel(new GridLayout(0,3)); panel.add(addButton); panel.add(removeButton); panel.add(clearButton); add(panel, BorderLayout.SOUTH); } // ... }
对于具有基于Swing的GUI的Java Applet,创建一个继承自javax.swing.JApplet
的子类。不包含Swing-based GUI的Applet可以扩展java.applet.Applet
类。
重写Applet的init
方法,实例化您的顶级JPanel
类并创建Applet的GUI。 DynamicTreeApplet
类的init
方法在AWT事件调度线程中调用createGUI
方法。
package appletComponentArch; import javax.swing.JApplet; import javax.swing.SwingUtilities; public class DynamicTreeApplet extends JApplet { //当此applet加载到浏览器中时调用。 public void init() { //在事件调度线程上执行一个任务;创建此applet的GUI。 try { SwingUtilities.invokeAndWait(new Runnable() { public void run() { createGUI(); } }); } catch (Exception e) { System.err.println("createGUI没有成功完成"); } } private void createGUI() { //创建并设置内容面板。 DynamicTreePanel newContentPane = new DynamicTreePanel(); newContentPane.setOpaque(true); setContentPane(newContentPane); } }
创建Applet的另一种方法是只需删除抽象层(单独的顶级JPanel
)并在Applet的init
方法中布局所有控件。直接在Applet中创建GUI的缺点是,如果以后选择将功能部署为Java Web Start应用程序,则部署将更加困难。
在Dynamic Tree Demo示例中,核心功能位于DynamicTreePanel
类中。现在,将DynamicTreePanel
类放入JFrame
中并部署为Java Web Start应用程序非常简单。
因此,为了保持可移植性并保持部署选项的开放性,请按照本页面所述的基于组件的设计方法。
下载源代码Dynamic Tree Demo Applet