package com.jb.arklis.demo;
import static java.lang.System.*;
import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.Panel;
import java.awt.Cursor;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.*;
/**
功能:书写一个窗体类,用来演示窗体与内部窗体的一般使用
作者:Arklis zeng
时间:2009-03-24
地点:北大青鸟锦江中心学术部
版本:ver 1.0.0
备注:
可以实现换肤有效果,以及让窗体不能调整大小,以及除去窗体的装饰条--看不到最小化、最大化和
关闭按钮,以及光标的样式等。
*/
public class SimpleInnerFrame extends JFrame{
JButton openButton, macButton, javaButton, motifButton, winButton;
JLayeredPane desktop;
JInternalFrame internalFrame;
public SimpleInnerFrame(){
super("演示内部窗体");
setSize(700, 400);
openButton = new JButton("打开");
macButton = new JButton("Plastic(非苹果)");
javaButton = new JButton("Metal(金属)");
motifButton = new JButton("Motif(主题)");
winButton = new JButton("Windows(微软)");
Panel p = new Panel();
p.add(openButton);
p.add(macButton);
p.add(javaButton);
p.add(motifButton);
p.add(winButton);
add(p, BorderLayout.SOUTH);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
openButton.addActionListener(new OpenListener());
LnFListener lnf = new LnFListener(this);
macButton.addActionListener(lnf);
javaButton.addActionListener(lnf);
motifButton.addActionListener(lnf);
winButton.addActionListener(lnf);
// Set up the layered pane
desktop = new JDesktopPane();
desktop.setOpaque(true);
add(desktop, BorderLayout.CENTER);
//设置主窗体光标的样式
setCursor(new Cursor(Cursor.HAND_CURSOR));
//如果设置为true,那么不加装饰条--把窗体标题、最小化、最大化和关闭按钮去掉
setUndecorated(true);//设置为false时可以看到正常的窗体
getRootPane().setWindowDecorationStyle(JRootPane.FRAME);
//设置false时不允许调整窗体大小,否则true时可以调整窗体的大小
setResizable(false);
//把窗体放在中间位置
setLocationRelativeTo(null);
setVisible(true);
}
class OpenListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if ((internalFrame == null) || (internalFrame.isClosed())) {
internalFrame = new JInternalFrame("内部窗体", true, true, true, true);
internalFrame.setBounds(50, 50, 200, 100);
desktop.add(internalFrame, new Integer(1));
internalFrame.setVisible(true);
}
}
}
public static void main(String[] args){
new SimpleInnerFrame();
}
}
class LnFListener implements ActionListener {
Frame frame;
public LnFListener(Frame f) {
frame = f;
}
public void actionPerformed(ActionEvent e) {
String lnfName = null;
if (e.getActionCommand().equals("Plastic(非苹果)")) {
//lnfName = "com.apple.mrj.swing.MacLookAndFeel";
lnfName = "com.jgoodies.looks.plastic.Plastic3DLookAndFeel"; //
} else if (e.getActionCommand().equals("Metal(金属)")) {
lnfName = "javax.swing.plaf.metal.MetalLookAndFeel";
} else if (e.getActionCommand().equals("Motif(主题)")) {
lnfName = "com.sun.java.swing.plaf.motif.MotifLookAndFeel";
} else if (e.getActionCommand().equals("Windows(微软)")) {
lnfName = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
} else {
err.println("Unrecognized L&F request action: " + e.getActionCommand());
return;
}
try {
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
} catch (UnsupportedLookAndFeelException ex1) {
err.println("不支持 LookAndFeel: " + lnfName);
} catch (ClassNotFoundException ex2) {
err.println("LookAndFeel类没有找到: " + lnfName);
} catch (InstantiationException ex3) {
err.println("不能装载LookAndFeel: " + lnfName);
} catch (IllegalAccessException ex4) {
err.println("不能使用LookAndFeel: " + lnfName);
}
}
}