科技时代新浪首页 > 科技时代 > 学园 > 正文

实例分析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中。
实例分析JavaSE6.0标准版的新增功能(2)

图1.一个把多个JComponent用作选项卡的JTabbedPane

  注意,Alexander Potochkin的博客中提供了另外一种不同的方法,它子类化JButton-重载paintComponent()并且画出它自己的("X")。如果你不想使用你的代码发布一个gif文件,那么使用这种更为复杂的方法是非常有用的。

[上一页] [1] [2] [3] [下一页]

发表评论

爱问(iAsk.com) 相关网页共约12,900,000篇。



评论】【论坛】【收藏此页】【 】【多种方式看新闻】【下载点点通】【打印】【关闭




科技时代意见反馈留言板 电话:010-82628888-5595   欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

Copyright © 1996 - 2006 SINA Corporation, All Rights Reserved

新浪公司 版权所有