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并将其部署为小程序非常简单。
因此,为了保持可移植性并保持部署选项的开放性,请按照本主题中描述的基于组件的设计进行操作。
下载源代码以进一步实验动态树演示示例。