Java swing界面设计

导入javax . 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);

}

}