Maybe create your own class that will extend JPopupMenu
and will contain field that will be used to determine which button need to change. This class can look like
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;
}
}
You will need to change JPopupMenu popup
to MyPopupMenu popup
and code inside constructor in your SystemGraph
class can look like
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);
}
});
}