菜单二(右键)

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();
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值