`
chenyu.hz
  • 浏览: 137695 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

java实现tab可关闭(chrome风格)

 
阅读更多

 

 

* @author zhangtao
package zht.tab.demo;

import java.awt.BorderLayout;

public class TabDemo extends JPanel {

	public static void main(String[] args) {
		ZHTUtils.showComponentInFrame(new TabDemo());
	}

	public TabDemo() {
		initGUI();
	}

	private ZHTTabbedPane pane = new ZHTChromeTabbedPane();
	private TabConfigDialog configDialog = new TabConfigDialog(pane);

	private void initGUI() {
		pane.setTabWidth(180);
		initTabPane();
		initTabPopupMenu();
		this.setLayout(new BorderLayout());
		this.add(pane, BorderLayout.CENTER);
	}

	private void initTabPopupMenu() {
		pane.setPopMenuGenerator(new TabPopupMenuGenerator() {
			public JPopupMenu generate(ZHTTabbedPane zhtTabbedPane, MouseEvent mouseEvent) {
				JPopupMenu menu = new JPopupMenu();
				final Tab currentTab = pane.getMouseOverTab();
				final List tabList = new ArrayList(pane.getTabList());
				final int index = tabList.indexOf(currentTab);
				final int size = tabList.size();
				JMenuItem item;
				if (currentTab != null) {

					item = createMenuItem("Close Tab", new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							pane.closeTab(currentTab);
						}
					});
					menu.add(item);

					item = createMenuItem("Close other tabs", new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							List removeList = new ArrayList();
							for (int i = 0; i < size; i++) {
								Tab tab = (Tab) tabList.get(i);
								if (tab != currentTab) {
									removeList.add(tab);
								}
							}
							int rsize = removeList.size();
							for (int i = 0; i < rsize; i++) {
								Tab tab = (Tab) removeList.get(i);
								pane.closeTab(tab);
							}
						}
					});
					if (size == 1) {
						item.setEnabled(false);
					}
					menu.add(item);

					item = createMenuItem("Close tabs to the left", new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							List removeList = new ArrayList();
							for (int i = index - 1; i >= 0; i--) {
								Tab tab = (Tab) tabList.get(i);
								removeList.add(tab);
							}
							int rsize = removeList.size();
							for (int i = 0; i < rsize; i++) {
								Tab tab = (Tab) removeList.get(i);
								pane.closeTab(tab);
							}
						}
					});
					if (index == 0) {
						item.setEnabled(false);
					}
					menu.add(item);
					item = createMenuItem("Close tabs to the right", new ActionListener() {
						public void actionPerformed(ActionEvent e) {
							for (int i = size - 1; i > index; i--) {
								pane.closeTab(i);
							}
						}
					});
					if (index == tabList.size() - 1) {
						item.setEnabled(false);
					}
					menu.add(item);
					menu.addSeparator();
				}
				item = createMenuItem("Config", new ActionListener() {
					public void actionPerformed(ActionEvent e) {
						configDialog.setVisible(true);
					}
				});
				menu.add(item);

				menu.addSeparator();
				item = createMenuItem("About", new ActionListener() {
					public void actionPerformed(ActionEvent e) {

					}
				});
				menu.add(item);
				return menu;
			}
		});
	}

	private JMenuItem createMenuItem(String label, ActionListener listener) {
		final JMenuItem item = new JMenuItem(label);
		if (listener != null) {
			item.addActionListener(listener);
		}
		item.setOpaque(false);
		return item;
	}

	private void initTabPane() {
		ImagePanel panel = new ImagePanel(new ImageIcon(this.getClass().getResource("google.png")));
		Icon icon = new ImageIcon(this.getClass().getResource("1.png"));
		Tab tab = new Tab(panel, false, icon, "GoogleZH");
		pane.addTab(tab, true);

		panel = new ImagePanel(new ImageIcon(this.getClass().getResource("googleen.png")));
		icon = new ImageIcon(this.getClass().getResource("2.png"));
		tab = new Tab(panel, true, icon, "GoogleEN");
		pane.addTab(tab);

		panel = new ImagePanel(new ImageIcon(this.getClass().getResource("googlenews.png")));
		icon = new ImageIcon(this.getClass().getResource("3.png"));
		tab = new Tab(panel, true, icon, "GoogleNews");
		pane.addTab(tab);

		panel = new ImagePanel(new ImageIcon(this.getClass().getResource("micro.png")));
		icon = new ImageIcon(this.getClass().getResource("1.png"));
		tab = new Tab(panel, true, icon, "Micro");
		pane.addTab(tab);

		panel = new ImagePanel(new ImageIcon(this.getClass().getResource("msn.png")));
		icon = new ImageIcon(this.getClass().getResource("2.png"));
		tab = new Tab(panel, true, icon, "MSN");
		pane.addTab(tab);

		pane.setBackgroundImage(new ImageIcon(this.getClass().getResource("back.jpg")).getImage());
	}

}

class ImagePanel extends JComponent {
	ImageIcon image;

	public ImagePanel(ImageIcon image) {
		this.image = image;
	}

	protected void paintComponent(Graphics g) {
		super.paintComponent(g);
		g.drawImage(image.getImage(), 0, 0, this);
	}
}

 

  • 大小: 54.4 KB
  • zht.zip (1.6 MB)
  • 下载次数: 124
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics