实例分析Java SE 6.0标准版的新增功能(2) |
|
http://www.sina.com.cn 2006年05月23日 09:50 天极yesky |
|
三、 使用Component描述JTabbedPane中的选项卡
这是Swing的JtabbedPane中的一处微妙但是很有价值的改进。在以前的JtabbedPane中,你被限制仅用一个字符串,一个图标(或二者的结合)来描述一个选项卡。另外,如果你想的话,你还可以把一个提示小窗加到该选项卡上去。从Mustang的build 39开始,现在有可能使用一个Component来描述JtabbedPane中的一个选项卡。尽管这可能带来一系列的问题,但是,这种特性的最常用的方式是:添加一个Close按钮-它将从JTabbedPane中删除该选项卡。
Sun程序员和Swing工程师Alexander Potochkin在他的最近的一个有关这个主题的博客日志中指出,这三个新方法已经被添加到JTabbedPane。
你可以使用下列方法把Component设置为一个选项卡:
public void setTabComponentAt(int index, Component component) | 你可以使用下列方法得到这个组件:
public Component getTabComponentAt(int index) | 你可以使用下列这个方法来测试是否有组件被应用于这个JtabbedPane中:
public int indexOfTabComponent(Component tabComponent) | 下面是一个选项卡面板示例源代码-它允许你从一个JTabbedPane中动态地添加和删除选项卡。注意,在这个例子中我们创建了一个Jpanel,它包含两个组件:一个位于面板左边(BorderLayout.WEST)的JLabel和一个位于面板右边(BorderLayout.EAST)的带有一个ImageIcon的按钮。这里所用的图形是一个10x10像素大小的gif文件-它包含了一个小X。为了确保按钮的尺寸小一些,我们把它的尺寸重置为图标的宽度和高度各自加上2个像素。
import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TabbedPaneExample implements ActionListener { private JFrame frame; private JTabbedPane tabbedPane; private JButton addTabButton; private ImageIcon closeXIcon; private Dimension closeButtonSize; private int tabCounter = 0; public TabbedPaneExample() { //创建选项卡面板 tabbedPane = new JTabbedPane(); //创建一个按钮-用户可用来添加一个选项卡到选项卡面板 addTabButton = new JButton("Add Tab"); addTabButton.addActionListener(this); //创建一个框架来包含这个选项卡面板 frame = new JFrame(); //创建一个图像图标'X'以实现在每一个选项卡上的关闭功能。加载的gif是一个10x10图形(非黑色部分是透明的) closeXIcon = new ImageIcon("C:/CloseX.gif"); //创建一个Dimension用来调整close按钮的大小 closeButtonSize = new Dimension( closeXIcon.getIconWidth()+2, closeXIcon.getIconHeight()+2); //所选项卡面板添加到图形中央,把"Add Tab"按钮置于南面。然后包装它,调整其大小并显示它。 frame.add(tabbedPane, BorderLayout.CENTER); frame.add(addTabButton, BorderLayout.SOUTH); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.pack(); frame.setMinimumSize(new Dimension(300, 300)); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { final JPanel content = new JPanel(); //创建一个描述该选项卡的面板并确保它是透明的 JPanel tab = new JPanel(); tab.setOpaque(false); //为该选项卡创建一个标签和一个Close按钮。一定要 //把它的尺寸设置为几乎该图标的大小,并且 //创建一个行为听取器-它将定位该选项卡并且从选项卡面板上删除它 JLabel tabLabel = new JLabel("Tab " + (++tabCounter)); JButton tabCloseButton = new JButton(closeXIcon); tabCloseButton.setPreferredSize(closeButtonSize); tabCloseButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int closeTabNumber = tabbedPane.indexOfComponent(content); tabbedPane.removeTabAt(closeTabNumber); } }); tab.add(tabLabel, BorderLayout.WEST); tab.add(tabCloseButton, BorderLayout.EAST); //把该选项卡添加到选项卡面板。注意, //第一个参数(它正常是一个描述选项卡标题的String //),为null. tabbedPane.addTab(null, content); //不是在选项卡上使用String/Icon的结合, //而是使用我们的面板。 tabbedPane.setTabComponentAt(tabbedPane.getTabCount()-1, tab); } public static void main(String[] args) { TabbedPaneExample main = new TabbedPaneExample(); } } | 结果显示于图1中。
图1.一个把多个JComponent用作选项卡的JTabbedPane | 注意,Alexander Potochkin的博客中提供了另外一种不同的方法,它子类化JButton-重载paintComponent()并且画出它自己的("X")。如果你不想使用你的代码发布一个gif文件,那么使用这种更为复杂的方法是非常有用的。
[上一页] [1] [2] [3] [下一页]
|
| | |