The Java Tutorials have been written for JDK 8.Java教程是为JDK 8编写的。Examples and practices described in this page don't take advantage of improvements introduced in later releases and might use technology no longer available.本页中描述的示例和实践没有利用后续版本中引入的改进,并且可能使用不再可用的技术。See Java Language Changes for a summary of updated language features in Java SE 9 and subsequent releases.有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言更改。
See JDK Release Notes for information about new features, enhancements, and removed or deprecated options for all JDK releases.有关所有JDK版本的新功能、增强功能以及已删除或不推荐的选项的信息,请参阅JDK发行说明。
Software designed by using component-based architecture can easily be developed and deployed as a Java Web Start application. 使用基于组件的体系结构设计的软件可以很容易地作为Java Web Start应用程序进行开发和部署。Consider the example of a Java Web Start application with a Swing-based graphical user interface (GUI). 请考虑使用基于Swing的图形用户界面(GUI)的java Web启动应用程序的示例。With component-based design, the GUI can be built with smaller building blocks or components. 通过基于组件的设计,GUI可以用更小的构建块或组件构建。The following general steps are used to create an application's GUI:以下一般步骤用于创建应用程序的GUI:
MyTopJPanel
class that is a subclass of JPanel
. Lay out your application's GUI components in the constructor of the MyTopJPanel
class.MyApplication
that is a subclass of the JFrame
class.main
method of the MyApplication
class, instantiate the MyTopJPanel
class and set it as the content pane of the JFrame
.The following sections explore these steps in greater detail by using the Dynamic Tree Demo application. If you are not familiar with Swing, see Creating a GUI with Swing to learn more about using Swing GUI components.
Click the following Launch button to launch the Dynamic Tree Demo application.单击下面的启动按钮启动动态树演示应用程序。
JPanel
ClassCreate a class that is a subclass of JPanel
. This top JPanel
acts as a container for all your other UI components. In the following example, the DynamicTreePanel
class is the topmost JPanel
. The constructor of the DynamicTreePanel
class invokes other methods to create and lay out the UI controls properly.
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()); //Create the components. treePanel = new DynamicTree(); populateTree(treePanel); JButton addButton = new JButton("Add"); addButton.setActionCommand(ADD_COMMAND); addButton.addActionListener(this); JButton removeButton = new JButton("Remove"); .... JButton clearButton = new JButton("Clear"); ... //Lay everything out. 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); } // ... }
For an application that has a Swing-based GUI, create a class that is a subclass of javax.swing.JFrame
.
Instantiate your top JPanel
class and set it as the content pane of the JFrame
in the application's main
method. The main
method of the DynamicTreeApplication
class invokes the createGUI
method in the AWT Event Dispatcher thread.
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() { //Create and set up the content pane. DynamicTreePanel newContentPane = new DynamicTreePanel(); newContentPane.setOpaque(true); setContentPane(newContentPane); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); pack(); setVisible(true); } }
Another way to create an application is to just remove the layer of abstraction (separate top JPanel
) and lay out all the controls in the application's main
method itself. The downside to creating the GUI directly in the application's main
method is that it will be more difficult to deploy your functionality as an applet, if you choose to do so later.
In the Dynamic Tree Demo example, the core functionality is separated into the DynamicTreePanel
class. It is now trivial to drop the DynamicTreePanel
class into a JApplet
and deploy it as an applet.
Hence, to preserve portability and keep deployment options open, follow component-based design as described in this topic.
Download source code for the Dynamic Tree Demo example to experiment further.