добавление ActionListener в JMenuItem не работает - PullRequest
0 голосов
/ 31 марта 2019

Я пытаюсь сделать выпадающее меню для этой программы, которое отображает кучу болезней, и я хочу, чтобы, когда я нажимаю на один из элементов в JMenuBar, он рисовал картинку, вызывая paintComponent, но мои actionlistenersне работает, во-первых, даже чтобы увидеть, нажата ли JMenuItem.Где моя ошибка в?Я перепробовал все, что мог

Я попытался поместить actionlisteners сразу после того, как объявил объекты jmenuitem, но безуспешно, попытался вмешаться в мой метод 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, но после тестирования это, похоже, не работает вообще.Любая помощь приветствуется.Спасибо

1 Ответ

1 голос
/ 31 марта 2019

Вы повторно объявляете пункты меню в методе, в котором вы их создали, делая их локальными для этого метода и скрывая переменную экземпляра с тем же именем.Таким образом, в слушателе действия вы сравниваете источник со значением null.

...