*设为首页
*加入收藏
热门关键字: JAVA
>>当前位置:Java大本营>Applet与Swing>文章内容
Java Swing 实例:动态切换窗体样式
作者: 发布时间:2007-12-20 22:52:49

在JDK1.6下写的。

/**
 * 
@author 叶俊154560
 *
 * TODO 多态切换Swing的观感
 * 
 * 程序运行结果:
 *         点击不同的按钮,panel变成不同的样式,并加入“窗口适配器”和“窗体状态监听器”
 
*/

package PlafTest;

import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowStateListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;

import SwingTest.GetScreenSize;

public class PlafTest{      
    
public static void main(String[] args){
        MyFrame frame 
= new MyFrame();
        
//frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);     
        frame.setTitle("改变窗体的观感");
        frame.setVisible(
true); 
    }

}


class MyFrame extends JFrame{
    
public static int ScreenWidth;
    
public static int ScreenHeight;
    
    
public MyFrame(){
        SetStatus();            
        
        MyPanel panel 
= new MyPanel();
        add(panel);
        
        
//监听捕捉窗体事件
        WindowListener listener = new Terminator(MyFrame.this);   //MyFrame.this        
        addWindowListener(listener);  
        
//监听窗体变化
        WindowStateListener stateListener = new StateChange(MyFrame.this); //MyFrame.this
        addWindowStateListener(stateListener);
    }

    
    
public void SetStatus(){
        GetScreenSize getScreenSize 
= new GetScreenSize();
        ScreenWidth 
= getScreenSize.getScreenWidth();
        ScreenHeight 
= getScreenSize.getScreenHeight();        
        setSize(ScreenWidth
/2, ScreenHeight/2);   
        setLocation(ScreenWidth
/4, ScreenHeight/4); 
    }

}


class MyPanel extends JPanel{
    
public MyPanel(){
        
//用getInstalledLookAndFeels获得已经安装在系统上的窗体样式的名字和类名,
        
//并利用它们创建3个按钮
        UIManager.LookAndFeelInfo[] infos = UIManager.getInstalledLookAndFeels();
        
for(int i=0; i<infos.length; i++){
            makeButton(infos[i].getName(),infos[i].getClassName());   
        }

    }


    
void makeButton(String name, String className){
        JButton myButton 
= new JButton(name);
        add(myButton);
        Action myAction 
= new Action(className,MyPanel.this);  //MyPanel.this
        myButton.addActionListener(myAction);
    }
 
}


//这里没有作为内部类,而是独立出来处理
class Action implements ActionListener{
    
private String plaf;
    
private JPanel myPanel;
    
    
public Action(String className,JPanel myPanel){
        plaf 
= className;
        
this.myPanel = myPanel;
    }

    
    
//在Action类中实现继承自ActionListener类的抽象方法actionPerformed
    public void actionPerformed(ActionEvent event){
        
try{
            UIManager.setLookAndFeel(plaf);
            SwingUtilities.updateComponentTreeUI(myPanel);  
        }

        
catch(Exception e){
            e.printStackTrace();
        }

    }

}


//窗口适配器
class Terminator extends WindowAdapter{
    
private MyFrame myFrame;
    
public Terminator(MyFrame myFrame){
        
this.myFrame = myFrame;
    }

    
    
public void windowClosing(WindowEvent e){
        
int k = JOptionPane.showConfirmDialog(null"hello,quit program?","请确定",1); 
        
while(k==0){
            System.exit(
0); 
        }
   
    }

}


//监听窗体状态改变
class StateChange implements WindowStateListener{    
    
private MyFrame myFrame;
    
public StateChange(MyFrame myFrame){
        
this.myFrame = myFrame;
    }

    
    
public void windowStateChanged(WindowEvent e){
        
int k = e.getNewState();
        
if ((k==Frame.MAXIMIZED_HORIZ)||(k==Frame.MAXIMIZED_VERT)||
                (k
==Frame.MAXIMIZED_BOTH)||(k==Frame.ICONIFIED)){            
            JOptionPane.showMessageDialog(
null"Sorry,but I will Change it Back!"); //显示一个对话框                         
            myFrame.SetStatus();
        }

    }

}


· SWT树节点上弹出菜单的实现 (02-05)
·基于 JSF+Spring + JPA 构建敏捷的Web(02-01)
·在SWING 的 JFileChooser中俘获返回的(01-20)
·SWT中设置TableViewer和TreeViewer为双(01-19)
·Spring之特殊字符转义和方法入参检测工(01-16)
·spring2.5 + hibernate3.2x 标注(annot(01-13)
·spring2.5 + hibernate3.2x 标注(annot(01-13)
·SWT中的FormLayout (01-10)
·Spring基础(01-10)
·Spring 让 LOB 数据操作简单化 (12-26)
·Swing中使用Html标签 (12-26)
·Swing中使用Html标签 (12-26)
复制地址发给您的好友: [推荐文章] [返回顶部] [关闭窗口]
版权所有 Java大本营 1999-2007 转载请注明出处