package ch01.section10.ex;
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.ButtonGroup;
import javax.swing.JFrame;
import javax.swing.JPopupMenu;
import javax.swing.JRadioButtonMenuItem;
public class PopImage extends JFrame {
Color[] colors = { Color.blue, Color.pink, Color.yellow, Color.red,
Color.orange }; // 颜色数组
/**
* java.swing.JpopupMenu是弹出菜单的实现,弹出菜单是一个可弹出并显示一系列选项的小窗口。
* JRadioButtonMenuItem是菜单的选项,可以是别的选项(如:JMenuItem等)
*/
private JPopupMenu menu = new JPopupMenu();
private JRadioButtonMenuItem[] items;
public PopImage() {
ChangAction action = new ChangAction();
String[] str = { "Blue", "Pink", "Yellow", "Red", "Orange" };
ButtonGroup colorGroup=new ButtonGroup(); //作用在于创建多个互斥的按钮组
/**
* 初始化弹出菜单,及其选项
*/
items = new JRadioButtonMenuItem[5];
for (int i = 0; i < str.length; i++) {
items[i] = new JRadioButtonMenuItem(str[i]);
items[i].addActionListener(action);
menu.add(items[i]);
}
/**
* 添加窗体(JFrame)的鼠标事件触发机制。
* 注意,内部方法
* java.awt.event.ComponentEvent.getComponent()返回事件的始发者,没有返回null,这里是
* JPopupMenu;
* e.getX(),e.getY()获得鼠标点击的位置
* private void press(MouseEvent e){
menu.show(e.getComponent(),e.getX(), e.getY());
}
*/
this.addMouseListener(new MouseListener(){
public void mouseClicked(MouseEvent arg0) {
// TODO Auto-generated method stub
// press(arg0);
}
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
// press(arg0);
}
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
press(arg0);
}
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
press(arg0);
}
private void press(MouseEvent e){
menu.show(e.getComponent(),e.getX(), e.getY());
}
});
this.setBackground(Color.white);
setSize(230, 160); // 设置窗口大小
setVisible(true); // 设置窗口为可视
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 关闭窗口时退出程序
}
class ChangAction implements ActionListener {
public void actionPerformed(ActionEvent e) {
for(int i=0;i<items.length;i++){
if(e.getSource()==items[i]){
getContentPane().setBackground(colors[i]);
repaint();
return;
}
}
}
}
public static void main(String[] str) {
new PopImage();
}
}