Java教程适用于JDK 8。本页面中描述的示例和实践不利用后续版本中引入的改进,可能使用不再可用的技术。
有关Java SE 9和后续版本中更新的语言功能的摘要,请参阅Java语言变更。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息,请参阅JDK发布说明。
使用组件化架构设计的软件可以轻松地开发和部署为Java Web Start应用程序。以使用基于Swing的图形用户界面(GUI)的Java Web Start应用程序为例。通过组件化设计,GUI可以使用较小的构建块或组件构建。以下是创建应用程序GUI的一般步骤:
MyTopJPanel
的类,该类是JPanel
的子类。在MyTopJPanel
类的构造函数中布置应用程序的GUI组件。MyApplication
的类,该类是JFrame
类的子类。MyApplication
类的main
方法中,实例化MyTopJPanel
类,并将其设置为JFrame
的内容面板。以下各节将详细介绍这些步骤,以使用Dynamic Tree Demo应用程序为例。如果您对Swing不熟悉,请参阅使用Swing创建GUI以了解更多有关使用Swing GUI组件的信息。
点击下面的“启动”按钮来启动Dynamic Tree Demo应用程序。
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的应用程序,创建一个继承自javax.swing.JFrame
的类。
在应用程序的main
方法中,实例化您的顶级JPanel
类,并将其设置为JFrame
的内容窗格。 DynamicTreeApplication
类的main
方法在AWT事件调度线程中调用createGUI
方法。
package webstartComponentArch; import javax.swing.JFrame; public class DynamicTreeApplication extends JFrame { public static void main(String [] args) { DynamicTreeApplication app = new DynamicTreeApplication(); app.createGUI(); } private void createGUI() { //创建并设置内容窗格。 DynamicTreePanel newContentPane = new DynamicTreePanel(); newContentPane.setOpaque(true); setContentPane(newContentPane); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } }
创建应用程序的另一种方法是只删除抽象层(单独的顶级JPanel
)并在应用程序的main
方法中布置所有控件。直接在应用程序的main
方法中创建GUI的缺点是,如果以后选择将功能部署为小程序,将更难以部署。
在动态树演示示例中,核心功能被分离到DynamicTreePanel
类中。现在,将DynamicTreePanel
类放入JApplet
并将其部署为小程序非常简单。
因此,为了保持可移植性并保持部署选项的开放性,请按照本主题中描述的基于组件的设计进行操作。
下载源代码以进一步实验动态树演示示例。