此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