Java swing界面设计
导入Java . awt . *;
导入Java . awt . event . *;
导入Java . awt . geom . affinite transform;
导入Java . util . ArrayList;
导入Java . util . hashmap;
/**
* JTabbedPane,每个选项卡上都有一个关闭(' X ')图标。若要添加选项卡,请使用
*方法addTab(String,Component)在每个选项卡上有一个额外的图标(例如
*在JBuilder中,显示文件类型)使用方法addTab(String,Component,
*图标)。仅单击“X”关闭选项卡。
*/
公共类ClosedTabPanel扩展JTabbedPane实现MouseListener {
私有双scaleRatio = 0.3
私有散列表& lt字符串,组件& gtmaps = new HashMap & lt字符串,组件& gt();
public ClosedTabPanel() {
super();
addmouse listener(this);
}
公共静态void main(String args[]) {
尝试{
ui manager . setlookandfeel(ui manager . getsystemlookandfeelclassname());
} catch(异常e) {
e . printstacktrace();
}
ClosedTabPanel pane = new ClosedTabPanel();
// ImageIcon icon = new ImageIcon("。\ \ Icons \ \ home . jpg ");
ImageIcon icon = null
pane.addTab("tab1 ",new JButton("第一个按钮"),icon);
pane.addTab("tab2 ",new JButton("sec Button "),icon);
pane.addTab("tab3 ",new JButton("第三个按钮"),icon);
pane.addTab("tab4 ",new JButton("第四个按钮"),icon);
JFrame frame = new JFrame(" Demo ");
frame.getContentPane()。添加(窗格,BorderLayout。中心);
frame.setSize(500,300);
frame.setLocation(300,200);
frame . set visible(true);
frame . setdefaultcloseoperation(JFrame。EXIT _ ON _ CLOSE);
}
public void addTab(字符串标题,组件component) {
this.addTab(title,component,null);
}
public void addTab(字符串标题、组件组件、图标extraIcon) {
super.addTab(title,new CloseTabIcon(extraIcon),component);
}
public void insertTab(字符串标题、图标图标、组件组件、字符串提示、整数索引){
tip = " tab "+component . hashcode();
maps.put(tip,component);
super.insertTab(标题、图标、组件、提示、索引);
}
public void remove tab(int index){
component component = getComponentAt(index);
maps . remove(" tab "+component . hashcode());
super . remove tabat(index);
}
public JToolTip createToolTip() {
image tooltip tooltip = new image tooltip();
tooltip . set component(this);
返回工具提示;
}
类ImageToolTip扩展JToolTip {
公共维度getPreferredSize() {
string tip = getTipText();
component component = maps . get(tip);
如果(分量!= null) {
返回新维度((int)(getscale ratio()* component . getwidth()),(int)(getscale ratio()* component . getheight()));
}否则{
返回super . getpreferredsize();
}
}
public void paint component(Graphics g){
string tip = getTipText();
component component = maps . get(tip);
if(JComponent的组件实例){
JComponent JComponent =(JComponent)组件;
graphics 2d g2d =(graphics 2d)g;
affinite transform at = g2d . get transform();
g2d . transform(affinite transform . getscale instance(getscale ratio()、getscale ratio()));
ArrayList & ltJComponent & gtdbcomponents = new ArrayList & ltJComponent & gt();
updateDoubleBuffered(jcomponent,db components);
jcomponent . paint(g);
resetDoubleBuffered(db components);
g2d . set transform(at);
}
}
private void updateDoubleBuffered(JComponent组件,ArrayList & ltJComponent & gtdbcomponents) {
if(component . isdoublebuffered()){
dbcomponents.add(组件);
component . setdoublebuffered(false);
}
for(int I = 0;我& ltcomponent . getcomponentcount();i++) {
component c = component . get component(I);
JComponent的c实例){
updateDoubleBuffered((JComponent)c,db components);
}
}
}
private void resetDoubleBuffered(ArrayList & lt;JComponent & gtdbcomponents) {
for(JComponent component:db components){
component . setdoublebuffered(true);
}
}
}
public double getScaleRatio() {
返回比例比;
}
public void setscale ratio(double scale ratio){
this . scale ratio = scale ratio;
}
public void mouse clicked(mouse event e){
int tabNumber = getUI()。tabForCoordinate(this,e.getX(),e . gety());
if(tab number & lt;0) {
返回;
}
rectangle rect =((CloseTabIcon)getIconAt(tab number))。get bounds();
if (rect.contains(e.getX(),e . gety()){
//选项卡正在被关闭
this . remove tabat(tab number);
}
}
public void mouse enter(mouse event e){
}
public void mouse exited(mouse event e){
}
public void mouse pressed(mouse event e){
}
public void mouse released(mouse event e){
}
}
/**
*为选项卡生成“X”图标的类。构造函数接受
*一个附加在“X”图标上的图标,因此您可以拥有类似于
* JBuilder。如果不需要额外的图标,则该值为null。
*/
类关闭图标实现图标{
private int x _ pos
private int y _ pos
private int宽度;
private int高度;
私有图标fileIcon
公共厕所图标(图标文件图标){
this . file icon = file icon;
宽度= 16;
身高= 16;
}
public void paintIcon(Component c,Graphics g,int x,int y) {
this.x _ pos = x
this.y _ pos = y
color col = g . getcolor();
g.setColor(新颜色(250,100,100));
int y _ p = y+2;
g.drawLine(x + 1,y_p,x + 12,y _ p);
g.drawLine(x + 1,y_p + 13,x + 12,y _ p+13);
g.drawLine(x,y_p + 1,x,y _ p+12);
g.drawLine(x + 13,y_p + 1,x + 13,y _ p+12);
g.drawLine(x + 3,y_p + 3,x + 10,y _ p+10);
g.drawLine(x + 3,y_p + 4,x + 9,y _ p+10);
g.drawLine(x + 4,y_p + 3,x + 10,y _ p+9);
g.drawLine(x + 10,y_p + 3,x + 3,y _ p+10);
g.drawLine(x + 10,y_p + 4,x + 4,y _ p+10);
g.drawLine(x + 9,y_p + 3,x + 3,y _ p+9);
g . set color(col);
if (fileIcon!= null) {
fileIcon.paintIcon(c,g,x + width,y _ p);
}
}
public int geticonvwidth(){
返回宽度+ (fileIcon!= null?fileicon . geticonvwidth():0);
}
public int getIconHeight() {
返回高度;
}
公共矩形getBounds() {
返回新的矩形(x_pos,y_pos,width,height);
}
}