SWING可关闭的JTabbedPane
来源:互联网 发布:select二级联动php 编辑:程序博客网 时间:2024/05/17 02:10
先定义基础类,为JPanel 绘制关闭按钮
/*
* To change this license header, choose License Headers in Project Properties.* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.AbstractButton;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.plaf.basic.BasicButtonUI;
/**
* 选项面板上的关闭按钮
*
* @author black
*
*/
public class ClosePanelComponent extends JPanel {
private static final long serialVersionUID = 1L;
private String title;
/**
* 选项面板
*/
private JTabbedPane pane;
public ClosePanelComponent(final JTabbedPane pane) {
super(new FlowLayout(FlowLayout.LEFT, 0, 0));
this.pane = pane;
setOpaque(false);
/**
* 显示面板名字的文本控件
*/
JLabel label = new JLabel() {
private static final long serialVersionUID = 1L;
public String getText() {
int i = pane.indexOfTabComponent(ClosePanelComponent.this);
if (i != -1) {
return pane.getTitleAt(i);
}
return null;
}
};
add(label);
label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
JButton button = new TabButton();
add(button);
setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
}
public ClosePanelComponent(String title, JTabbedPane pane) {
super(new FlowLayout(FlowLayout.LEFT, 0, 0));
this.pane = pane;
this.title = title;
setOpaque(false);
JLabel label = new JLabel(title);
add(label);
label.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 5));
JButton button = new TabButton();
add(button);
setBorder(BorderFactory.createEmptyBorder(2, 0, 0, 0));
}
/**
* 关闭按钮,用于关闭当前选项面板
*
* @author bruce
*
*/
private class TabButton extends JButton implements ActionListener {
/**
*
*/
private static final long serialVersionUID = 1L;
/**
* 初始化关闭按钮
*/
public TabButton() {
int size = 17;
setPreferredSize(new Dimension(size, size));
setToolTipText("关闭");
setUI(new BasicButtonUI());
setContentAreaFilled(false);
setFocusable(false);
setBorder(BorderFactory.createEtchedBorder());
setBorderPainted(false);
addMouseListener(buttonMouseListener);
setRolloverEnabled(true);
addActionListener(this);
}
/**
* 移除面板
*/
public void actionPerformed(ActionEvent e) {
int i = pane.indexOfTabComponent(ClosePanelComponent.this);
if (i != -1) {
pane.remove(i);
}
}
/**
* 画关闭按钮
*/
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g.create();
if (getModel().isPressed()) {
g2.translate(1, 1);
}
g2.setStroke(new BasicStroke(2));
g2.setColor(Color.BLACK);
if (getModel().isRollover()) {
g2.setColor(Color.MAGENTA);
}
int delta = 6;
g2.drawLine(delta, delta, getWidth() - delta - 1, getHeight()
- delta - 1);
g2.drawLine(getWidth() - delta - 1, delta, delta, getHeight()
- delta - 1);
g2.dispose();
}
}
private final static MouseListener buttonMouseListener = new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
Component component = e.getComponent();
if (component instanceof AbstractButton) {
AbstractButton button = (AbstractButton) component;
button.setBorderPainted(true);
}
}
public void mouseExited(MouseEvent e) {
Component component = e.getComponent();
if (component instanceof AbstractButton) {
AbstractButton button = (AbstractButton) component;
button.setBorderPainted(false);
}
}
};
}
=======================================================================================
下面是关于这个对象的使用,
private javax.swing.JTabbedPane jTabbedPane1; 可关闭Panel的容器对象
static LinkedHashMap<String, TesterPanel> tablePanelObject = new LinkedHashMap(); //TesterPanel为自定义的普通Panel,tablePanelObject 用来管理窗口的全局变量
这两个对象是主窗口的内部变量,自己创建即可。
======================================================================================
public void newTerserWindow(String title) {
TesterPanel tester = tablePanelObject.get(title);
if (tester == null) {
//内存中没有,先添加到内存linkedHashMap全局变量里
tester = new TesterPanel(title);
tester.setVisible(true);
tablePanelObject.put(title, tester);
//然后创建可关闭的页签
jTabbedPane1.add(tester);
ClosePanelComponent bt = new ClosePanelComponent(title, jTabbedPane1);
jTabbedPane1.setTabComponentAt(jTabbedPane1.getTabCount() - 1, bt);
jTabbedPane1.setSelectedComponent(tester);
} else {
boolean flag = false;
//如果内存中有,检查页签是否已经被打开
for (int index = 0; index < jTabbedPane1.getTabCount(); index++) {
if (jTabbedPane1.getComponentAt(index).equals(tester)) { //如果找到,选中即可
jTabbedPane1.setSelectedComponent(tester);
flag = true;
break;
}
}
if (!flag) {
//如果没有,说明被关闭了,则从内存拿对象,新建页签
jTabbedPane1.add(tester);
ClosePanelComponent bt = new ClosePanelComponent(sd.getServiceCode(), jTabbedPane1);
jTabbedPane1.setTabComponentAt(jTabbedPane1.getTabCount() - 1, bt);
jTabbedPane1.setSelectedComponent(tester);
}
}
}
- SWING可关闭的JTabbedPane
- 【Swing入门教程】一步一步做Netbeans(2):定制可关闭的JTabbedPane标签
- 带关闭按钮可定制的JTabbedPane
- JTabbedPane的扩展,可关闭,可预览(学习了)
- Swing:可选择关闭的 JTabbedPane(经过了一定的UI优化)
- Swing:可选择关闭的 JTabbedPane(为某位同学定制的非通用组件)
- 用Java Swing实现可以拖拽tab的JTabbedPane
- JTabbedPane实现关闭按钮
- JTabbedPane实现关闭按钮
- j2se可切换标签控件JTabbedPane的使用实例
- (总结)Swing组件的使用---下拉式菜单(menu),弹出式菜单(JPopupMenu),选项卡窗体(JTabbedPane)
- Swing实现选项卡功能(JTabbedPane)
- Java Swing界面编程(14)---JTabbedPane
- JTabbedPane的使用
- JTabbedPane的事件监听
- JTabbedPane的使用
- 模拟火狐的JTabbedPane
- JTabbedPane的使用
- spring加载*.yml和*.properties文件
- springboot实际项目:日志打印、表单验证、异常处理
- unity shader 旗帜飘动
- HashMap实现原理分析及简单实现一个HashMap
- h标签,p标签,br标签 hr per
- SWING可关闭的JTabbedPane
- 装饰模式
- KMP算法
- C#面向对象编程(Object-Oriented Programming)
- 九九乘法表
- MVC模型以及Model2模型介绍
- 2017.11.07工作日记
- 线程基础(一)
- Java学习——Number & Math 类