Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPopupMenue和按钮_Java_Swing_Jbutton_Jpopupmenu - Fatal编程技术网

Java JPopupMenue和按钮

Java JPopupMenue和按钮,java,swing,jbutton,jpopupmenu,Java,Swing,Jbutton,Jpopupmenu,我希望我的程序将执行以下操作: 对于要添加jpopupmenue的每个按钮,当单击其中一个按钮以显示其jpopupmenue时,以及当: 单击第一个JMenueItem-将触发jpopmenue的按钮颜色更改为红色 单击第二个JMenueItem-将触发jpopmenue的按钮颜色更改为蓝色 单击第三个JMenueItem,将触发JPOppMenue的按钮的颜色更改为黄色,并且仅将其更改为黄色 问题是,当我单击其中一个按钮并通过jpopmenue更改其颜色时,单击的第二个按钮会自动更改为相同

我希望我的程序将执行以下操作:

对于要添加jpopupmenue的每个按钮,当单击其中一个按钮以显示其jpopupmenue时,以及当:

  • 单击第一个JMenueItem-将触发jpopmenue的按钮颜色更改为红色
  • 单击第二个JMenueItem-将触发jpopmenue的按钮颜色更改为蓝色
  • 单击第三个JMenueItem,将触发JPOppMenue的按钮的颜色更改为黄色,并且仅将其更改为黄色
问题是,当我单击其中一个按钮并通过jpopmenue更改其颜色时,单击的第二个按钮会自动更改为相同的颜色

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
import javax.swing.AbstractAction;
import javax.swing.AbstractButton;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPopupMenu;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * 
 * @author shani moyal
 */
public class systemgraph extends JPanel implements ActionListener {

    // data//

    private int countplugs;
    JPopupMenu popup;
    private JButton btn;
    static JFrame frame;
    private JButton[] buttons;
    private BufferedImage bi;
    JMenuItem m2Frame1;
    JMenuItem m2Frame3;
    JMenuItem m2Frame2;

    public systemgraph(int size) {
        popup = new JPopupMenu();
        m2Frame1 = new JMenuItem("plug");
        m2Frame2 = new JMenuItem("second");
        m2Frame3 = new JMenuItem("third");
        popup.add(m2Frame1);
        popup.add(m2Frame2);
        popup.add(m2Frame3);
        popup.addMouseListener(null);

        buttons = new JButton[size];

        for (int i = 0; i < size; i++) {
            ImageIcon circle = new ImageIcon(
                    "C:\\Users\\shani moyal\\Desktop\\תמונות לגרפיקה         לפרויקט   \\imagesCA4ZS816.jpg");
            buttons[i] = new JButton((String.valueOf(i)));
            buttons[i].setName(String.valueOf(i));
            buttons[i].setBackground(Color.GREEN);
            buttons[i].setPreferredSize(new Dimension(80, 80));
            buttons[i].setEnabled(true);
            buttons[i].addMouseListener(new MouseAdapter() {
                public void mousePressed(MouseEvent e) {
                    // JButton button = (JButton)e.getSource();

                    final Component cmp = (Component) e.getSource();

                    popup.show(e.getComponent(), e.getX(), e.getY());
                    // popup.addMouseListener(this);

                    m2Frame1.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mousePressed(MouseEvent e) {
                            cmp.setBackground(Color.red);

                        }
                    });

                    m2Frame2.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mousePressed(MouseEvent e) {
                            cmp.setBackground(Color.BLUE);

                        }
                    });
                    m2Frame3.addMouseListener(new MouseAdapter() {
                        @Override
                        public void mousePressed(MouseEvent e) {
                            cmp.setBackground(Color.YELLOW);

                        }
                    });

                    /*
                     * m2Frame1.addMouseListener(new MouseAdapter() {
                     * 
                     * @Override public void mousePressed(MouseEvent e) {
                     * cmp.setBackground(Color.MAGENTA);
                     * 
                     * } });
                     */

                }
            });

            this.add(buttons[i], BorderLayout.NORTH);

        }

    }

    private static void createAndShowGUI() {

        frame = new JFrame("ButtonDemo");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Simple Fiber GUI system (K&CG lab. Ariel U.");
        systemgraph newContentPane = new systemgraph(6);
        newContentPane.setOpaque(true);

        frame.setContentPane(newContentPane);

        frame.pack();
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        javax.swing.SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                createAndShowGUI();
            }
        });
    }

    @Override
    public void actionPerformed(ActionEvent e) {

    }
}
导入java.awt.BorderLayout;
导入java.awt.Color;
导入java.awt.Component;
导入java.awt.Dimension;
导入java.awt.GridLayout;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.KeyEvent;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.MouseListener;
导入java.awt.image.buffereImage;
导入javax.swing.AbstractAction;
导入javax.swing.AbstractButton;
导入javax.swing.ImageIcon;
导入javax.swing.JButton;
导入javax.swing.JFrame;
导入javax.swing.JMenuItem;
导入javax.swing.JOptionPane;
导入javax.swing.JPanel;
导入javax.swing.jpopmenu;
/*
*要更改此模板,请选择工具|模板
*然后在编辑器中打开模板。
*/
/**
* 
*@作者shani moyal
*/
公共类systemgraph扩展JPanel实现ActionListener{
//资料//
私人int计数插头;
jpopmpmenu弹出窗口;
专用按钮btn;
静态JFrame;
私有JButton[]按钮;
私有缓冲映像bi;
项目M21;
项目M23;
项目M22框架;
公共系统图(整数大小){
popup=new JPopupMenu();
m2Frame1=新的JMenuItem(“插头”);
m2Frame2=新项目(“第二个”);
m2Frame3=新项目(“第三”);
添加(m2Frame1);
添加(m2Frame2);
添加(m2Frame3);
popup.addMouseListener(空);
按钮=新的JButton[大小];
对于(int i=0;i
当您第一次按下按钮时,您将向m2Frame1添加鼠标侦听器。 当您按下另一个按钮时,您正在添加另一个鼠标侦听器,但请注意,您并没有删除第一个鼠标侦听器。因此,当您单击JMenuItem m2Frame1时,您将调用两个鼠标侦听器

这里发生的事情是,当调用2个鼠标侦听器时,您将更改2个按钮的颜色


您应该尝试在代码开头向m2Frame1添加一个MouseListener。当然,您需要弄清楚如何让JMenuItem选择它必须修改的按钮。

可能会创建您自己的类,该类将扩展
JPopupMenu
,并包含用于确定需要更改哪个按钮的字段。这个类可以看起来像

class MyPopupMenu extends JPopupMenu{

    private static final long serialVersionUID = 1L;

    private JButton button;

    public JButton getButton() {
        return button;
    }

    public void setButton(JButton button) {
        this.button = button;
    }
}
public SystemGraph(int size) {
    popup = new MyPopupMenu();
    m2Frame1 = new JMenuItem("red");
    m2Frame2 = new JMenuItem("blue");
    m2Frame3 = new JMenuItem("yellow");
    popup.add(m2Frame1);
    popup.add(m2Frame2);
    popup.add(m2Frame3);
    popup.addMouseListener(null);

    buttons = new JButton[size];

    for (int i = 0; i < size; i++) {
        ImageIcon circle = new ImageIcon(
                "C:\\Users\\shani moyal\\Desktop\\תמונות לגרפיקה         לפרויקט   \\imagesCA4ZS816.jpg");
        buttons[i] = new JButton((String.valueOf(i)));
        buttons[i].setName(String.valueOf(i));
        buttons[i].setBackground(Color.GREEN);
        buttons[i].setPreferredSize(new Dimension(80, 80));
        buttons[i].setEnabled(true);
        final JButton tmp = buttons[i];
        buttons[i].addMouseListener(new MouseAdapter() {
            public void mousePressed(MouseEvent e) {
                popup.setButton(tmp);
                popup.show(e.getComponent(), e.getX(), e.getY());
            }
        });

        this.add(buttons[i], BorderLayout.NORTH);

    }

    m2Frame1.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            MyPopupMenu p = (MyPopupMenu)e.getComponent().getParent();
            p.getButton().setBackground(Color.RED);
        }
    });

    m2Frame2.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            MyPopupMenu p = (MyPopupMenu)e.getComponent().getParent();
            p.getButton().setBackground(Color.BLUE);
        }
    });
    m2Frame3.addMouseListener(new MouseAdapter() {
        @Override
        public void mousePressed(MouseEvent e) {
            MyPopupMenu p = (MyPopupMenu)e.getComponent().getParent();
            p.getButton().setBackground(Color.YELLOW);
        }
    });

}
你需要