将 ActionListener 添加到 JMenuItem 不起作用
adding ActionListener to JMenuItem not working
我正在尝试为这个显示一堆疾病的程序制作一个下拉菜单,我想要它,所以当我单击 JMenuBar 中的一个项目时,它通过调用 paintComponent 绘制了一张图片,但是我的 actionlisteners 根本无法工作,甚至无法查看 JMenuItem 是否被单击。我的错误在哪里?我已经尽力了
我曾尝试在声明 jmenuitem 对象后立即放置 actionlisteners 但没有成功,尝试干预我的 actionPerformed 方法但在解决我的问题方面收效甚微。
public void makeDDM()
{
ddmFRAME = new JFrame ("you.");
ddmPANEL = new JPanel();
ddmFRAME.setSize(300, 700);
ddmFRAME.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ddmFRAME.setLocation(0,0);
ddmFRAME.setResizable(true);
DDM dmeOne = new DDM();
ddmIMAGE dmeTwo = new ddmIMAGE();
ddmTITLE dmeThree = new ddmTITLE();
ddmPANEL.setLayout(new GridLayout(3,1));
ddmPANEL.add(dmeThree); //yellow
ddmPANEL.add(dmeOne); //blue
ddmPANEL.add(dmeTwo); //red
ddmFRAME.add(ddmPANEL);
ddmFRAME.setVisible(true);
}
class DDM extends JPanel implements ActionListener
{
public DDM()
{
setBackground(Color.ORANGE);
jmb = new JMenuBar();
ddmFRAME.setJMenuBar(jmb);
JMenu file = new JMenu("Examples Of Diseases / Conditions");
jmb.add(file);
file.setOpaque(true);
file.setBackground(Color.GREEN.darker());
JMenuItem itemOne = new JMenuItem("Anorexia");
file.add(itemOne);
itemOne.addActionListener(this);
JMenuItem itemTwo = new JMenuItem("Cancer");
file.add(itemTwo);
itemTwo.addActionListener(this);
JMenuItem itemThree = new JMenuItem("High Blood Cholesetrol");
file.add(itemThree);
itemThree.addActionListener(this);
JMenuItem itemFour = new JMenuItem("Heart Disease");
file.add(itemFour);
itemFour.addActionListener(this);
JMenuItem itemFive = new JMenuItem("Obesity");
file.add(itemFive);
itemFive.addActionListener(this);
JMenuItem itemSix = new JMenuItem("Stroke");
file.add(itemSix);
itemSix.addActionListener(this);
itemOne.setOpaque(true);
itemOne.setBackground(Color.GREEN.darker());
itemTwo.setOpaque(true);
itemTwo.setBackground(Color.GREEN.darker());
itemThree.setOpaque(true);
itemThree.setBackground(Color.GREEN.darker());
itemFour.setOpaque(true);
itemFour.setBackground(Color.GREEN.darker());
itemFive.setOpaque(true);
itemFive.setBackground(Color.GREEN.darker());
itemSix.setOpaque(true);
itemSix.setBackground(Color.GREEN.darker());
add(jmb, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource() == itemOne)
{
anorexia = true;
System.out.println(anorexia + " hi nigd");
dmeTwo.repaint();
}
else if(evt.getSource() == itemTwo)
{
cancer = true;
dmeTwo.repaint();
}
else if(evt.getSource() == itemThree)
{
heart1 = true;
dmeTwo.repaint();
}
else if(evt.getSource() == itemFour)
{
heart2 = true;
dmeTwo.repaint();
}
else if(evt.getSource() == itemFive)
{
obesity = true;
dmeTwo.repaint();
}
else if(evt.getSource() == itemSix)
{
stroke = true;
dmeTwo.repaint();
}
}
}
// i declared image file before this paintComponent method
public void paintComponent(Graphics g)
{
super.paintComponent(g);
System.out.println(anorexia);
if(anorexia)
{
System.out.println("hi");
g.drawImage(ddmPIC1, 0, 0, this);
}
else if(cancer)
{
g.drawImage(ddmPIC2, 0, 0, this);
}
else if(heart1)
{
g.drawImage(ddmPIC3, 0, 0, this);
}
else if(heart2)
{
g.drawImage(ddmPIC4, 0, 0, this);
}
else if(obesity)
{
g.drawImage(ddmPIC5, 0, 0, this);
}
else if(stroke)
{
g.drawImage(ddmPIC6, 0, 0, this);
}
}
}
我希望当我单击其中一个 JMenuItems 时声明的布尔值变为真,但经过测试,这似乎根本不起作用。任何帮助表示赞赏。谢谢
您在创建它们的方法中重新声明了菜单项,使它们成为该方法的局部变量并隐藏了同名的实例变量。因此,在动作侦听器中,您将源与空值进行比较。
我正在尝试为这个显示一堆疾病的程序制作一个下拉菜单,我想要它,所以当我单击 JMenuBar 中的一个项目时,它通过调用 paintComponent 绘制了一张图片,但是我的 actionlisteners 根本无法工作,甚至无法查看 JMenuItem 是否被单击。我的错误在哪里?我已经尽力了
我曾尝试在声明 jmenuitem 对象后立即放置 actionlisteners 但没有成功,尝试干预我的 actionPerformed 方法但在解决我的问题方面收效甚微。
public void makeDDM()
{
ddmFRAME = new JFrame ("you.");
ddmPANEL = new JPanel();
ddmFRAME.setSize(300, 700);
ddmFRAME.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ddmFRAME.setLocation(0,0);
ddmFRAME.setResizable(true);
DDM dmeOne = new DDM();
ddmIMAGE dmeTwo = new ddmIMAGE();
ddmTITLE dmeThree = new ddmTITLE();
ddmPANEL.setLayout(new GridLayout(3,1));
ddmPANEL.add(dmeThree); //yellow
ddmPANEL.add(dmeOne); //blue
ddmPANEL.add(dmeTwo); //red
ddmFRAME.add(ddmPANEL);
ddmFRAME.setVisible(true);
}
class DDM extends JPanel implements ActionListener
{
public DDM()
{
setBackground(Color.ORANGE);
jmb = new JMenuBar();
ddmFRAME.setJMenuBar(jmb);
JMenu file = new JMenu("Examples Of Diseases / Conditions");
jmb.add(file);
file.setOpaque(true);
file.setBackground(Color.GREEN.darker());
JMenuItem itemOne = new JMenuItem("Anorexia");
file.add(itemOne);
itemOne.addActionListener(this);
JMenuItem itemTwo = new JMenuItem("Cancer");
file.add(itemTwo);
itemTwo.addActionListener(this);
JMenuItem itemThree = new JMenuItem("High Blood Cholesetrol");
file.add(itemThree);
itemThree.addActionListener(this);
JMenuItem itemFour = new JMenuItem("Heart Disease");
file.add(itemFour);
itemFour.addActionListener(this);
JMenuItem itemFive = new JMenuItem("Obesity");
file.add(itemFive);
itemFive.addActionListener(this);
JMenuItem itemSix = new JMenuItem("Stroke");
file.add(itemSix);
itemSix.addActionListener(this);
itemOne.setOpaque(true);
itemOne.setBackground(Color.GREEN.darker());
itemTwo.setOpaque(true);
itemTwo.setBackground(Color.GREEN.darker());
itemThree.setOpaque(true);
itemThree.setBackground(Color.GREEN.darker());
itemFour.setOpaque(true);
itemFour.setBackground(Color.GREEN.darker());
itemFive.setOpaque(true);
itemFive.setBackground(Color.GREEN.darker());
itemSix.setOpaque(true);
itemSix.setBackground(Color.GREEN.darker());
add(jmb, BorderLayout.CENTER);
}
public void actionPerformed(ActionEvent evt)
{
if(evt.getSource() == itemOne)
{
anorexia = true;
System.out.println(anorexia + " hi nigd");
dmeTwo.repaint();
}
else if(evt.getSource() == itemTwo)
{
cancer = true;
dmeTwo.repaint();
}
else if(evt.getSource() == itemThree)
{
heart1 = true;
dmeTwo.repaint();
}
else if(evt.getSource() == itemFour)
{
heart2 = true;
dmeTwo.repaint();
}
else if(evt.getSource() == itemFive)
{
obesity = true;
dmeTwo.repaint();
}
else if(evt.getSource() == itemSix)
{
stroke = true;
dmeTwo.repaint();
}
}
}
// i declared image file before this paintComponent method
public void paintComponent(Graphics g)
{
super.paintComponent(g);
System.out.println(anorexia);
if(anorexia)
{
System.out.println("hi");
g.drawImage(ddmPIC1, 0, 0, this);
}
else if(cancer)
{
g.drawImage(ddmPIC2, 0, 0, this);
}
else if(heart1)
{
g.drawImage(ddmPIC3, 0, 0, this);
}
else if(heart2)
{
g.drawImage(ddmPIC4, 0, 0, this);
}
else if(obesity)
{
g.drawImage(ddmPIC5, 0, 0, this);
}
else if(stroke)
{
g.drawImage(ddmPIC6, 0, 0, this);
}
}
}
我希望当我单击其中一个 JMenuItems 时声明的布尔值变为真,但经过测试,这似乎根本不起作用。任何帮助表示赞赏。谢谢
您在创建它们的方法中重新声明了菜单项,使它们成为该方法的局部变量并隐藏了同名的实例变量。因此,在动作侦听器中,您将源与空值进行比较。