package windowcomponents;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Insets;
import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.geom.AffineTransform; import java.awt.image.BufferedImage;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;
public class WindowsStartMenuSimulation {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DemoWindow15 dw = new DemoWindow15("模拟Windows开始菜单");
dw.setBounds(dw.getToolkit().getScreenSize().width / 3, dw.getToolkit()
.getScreenSize().height / 3,
dw.getToolkit().getScreenSize().width / 3, dw.getToolkit()
.getScreenSize().height / 3);
dw.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
dw.setVisible(true);
}
}
class DemoWindow15 extends JFrame implements ActionListener {
// 菜单项图片
Image updateImage = new ImageIcon("images/update.gif").getImage();
Image programImage = new ImageIcon("images/program.gif").getImage();
Image documentImage = new ImageIcon("images/document.gif").getImage();
Image setImage = new ImageIcon("images/set.gif").getImage();
Image findImage = new ImageIcon("images/find.gif").getImage();
Image helpImage = new ImageIcon("images/help.gif").getImage();
Image runImage = new ImageIcon("images/run.gif").getImage();
Image logoutImage = new ImageIcon("images/logout.gif").getImage();
Image shutdownImage = new ImageIcon("images/shutdown.gif").getImage();
// 按钮图片
ImageIcon windowsImage = new ImageIcon("images/windows.gif");
// “开始”按钮
JButton jb = new JButton("开始", windowsImage);
StartMenu sm = new StartMenu();
// 布局面板
JPanel jp1 = new JPanel();
JPanel jp2 = new JPanel();
ImageMenu1 im = null;
public DemoWindow15(String title) {
super(title);
jb.setFont(new Font("宋体", Font.BOLD, 18));
jp2.setLayout(new BorderLayout());
jp2.add(jb, BorderLayout.WEST);
add(jp1, BorderLayout.CENTER);
add(jp2, BorderLayout.SOUTH);
im = new ImageMenu1("Windows Update", updateImage); im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
im = new ImageMenu1("程序", programImage);
im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
im = new ImageMenu1("文档", documentImage);
im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
im = new ImageMenu1("设置", setImage);
im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
im = new ImageMenu1("搜索", findImage);
im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
im = new ImageMenu1("帮助和支持", helpImage);
im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
im = new ImageMenu1("运行", runImage);
im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
im = new ImageMenu1("注销", logoutImage);
im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
im = new ImageMenu1("关机", shutdownImage);
im.setFont(new Font("宋体", Font.BOLD, 22));
sm.add(im);
// 添加事件监听器
jb.addActionListener(this);
}
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// 设置菜单可见,获得菜单的高度,便于下一步设置菜单的位置
sm.setVisible(true);
// 显示图片菜单,通过位置设置,显示向上弹出的效果
sm.show(jp1, 0, jp1.getHeight() - sm.getHeight());
}
}
class StartMenu extends JPopupMenu {
// 显示Windows XP professional的文字图片
private Image image = null;
public StartMenu() {
// 创建文字图片
image = createImage();
}
public Image createImage() {
String text = "Windows XP Professional";
// 创建缓冲图片类变量
BufferedImage bi = new BufferedImage(30, 400,
BufferedImage.TYPE_INT_ARGB);
// 获取缓冲图片的2D绘图类变量
Graphics2D g2d = bi.createGraphics();
// 绘制渐变背景
GradientPaint paint = new GradientPaint(0, 0, Color.black, 100, 100,
Color.blue, true);
g2d.setPaint(paint);
g2d.fillRect(0, 0, bi.getWidth(), bi.getHeight());
// 逆时针旋转绘制角度90度
AffineTransform at = new AffineTransform();
at.rotate(-Math.PI / 2);
g2d.setTransform(at);
g2d.setColor(Color.white);
g2d.setFont(new Font("宋体", Font.BOLD, 16));
// 获取文字尺寸
FontMetrics metrics = g2d.getFontMetrics();
int width = metrics.stringWidth(text);
int height = metrics.getAscent();
// 居中绘制文字
g2d.drawString(text, -width - 50, bi.getWidth() / 2);
return bi;
}
public Insets getInsets() {
Insets insets = (Insets) super.getInsets().clone();
insets.left += image.getWidth(null);
return insets;
}
public void paint(Graphics g) {
super.paint(g);
if (image != null) {
Insets insets = getInsets();
g.drawImage(image, insets.left - image.getWidth(null), insets.top,
null);
}
}
}
// 图片菜单项类
class ImageMenu1 extends JMenuItem {
private Image image = null;
public ImageMenu1(String title, Image image) {
super(title);
this.image = image;
}
// 设置菜单项中显示文字图片的间隔大小
public Insets getInsets() {
Insets insets = (Insets) super.getInsets().clone();
insets.left += image.getWidth(null);
return insets;
}
// 重载绘图函数
public void paint(Graphics g) {
super.paint(g);
if (image != null) {
// 获取间隔
Insets insets = getInsets();
g.drawImage(image, 0, 0, null);
}
}
}