Изображение не появляется при нажатии JLabel из меню JButton (Java) - PullRequest
0 голосов
/ 24 октября 2018

У меня вопрос к изображению, которое не появляется при нажатии jlabel из меню. Почему изображение не появляется, когда я щелкаю из меню?Пожалуйста помоги.Новичок здесь

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.event.*;

public class Lab05Part02 extends JFrame implements ActionListener{

JMenuItem b1,b2,b3;
JLabel bankImg;
ImageIcon img1 = new ImageIcon("aib.jpg");
ImageIcon img2 = new ImageIcon("BOI.jpg");
ImageIcon img3 = new ImageIcon("kbc.jpeg");

Lab05Part02(){

    JMenuBar mb = new JMenuBar();

    JMenu banks = new JMenu("Banks", false);

    banks.add(b1 = new JMenuItem("AIB"));
    b1.addActionListener(this);
    banks.add(b2 = new JMenuItem("Bank of Ireland"));
    b2.addActionListener(this);
    banks.add(b3 = new JMenuItem("KBC"));
    b3.addActionListener(this);

    mb.add(banks);
    setJMenuBar(mb);

    JPanel p = new JPanel();

    bankImg = new JLabel();

    p.add(bankImg);
    getContentPane().add(p);

    setSize(500,500);
    setVisible(true);


}//end of constructor

public static void main(String[] args){

    Lab05Part02 myMenu = new Lab05Part02();


}//end of main method

public void actionPerformed(ActionEvent e){

    Object source = new Object();

    if(source == b1){

         bankImg.setIcon(img1);

    }
    else if(source == b2){

        bankImg.setIcon(img2);

    }
    else if(source == b3){

        bankImg.setIcon(img3);

    }

    else{

        bankImg.setText("Select Image from Menu");

    }


}//end of listener method

}//end of class

Где я ошибся?На еще если заявления?Может кто-то объяснить это мне?Я поставил setVisible (true) при каждом условии, но это не сработало.Заранее спасибо!

1 Ответ

0 голосов
/ 24 октября 2018

В методе actionPerformed вы забыли получить исходный объект от ActionEvent e и создали новый объект:

Object source = new Object();

Как очевидно, таким образом source неравняется ссылке на одну из ваших кнопок.

Объект ActionEvent содержит источник события.Для решения проблемы получите исходный объект из аргумента ActionEvent e:

Object source = e.getSource();

Если ваши изображения ("aib.jpg", "BOI.jpg" и "kbc.jpeg") находятся вправильный путь и ваши ImageIcon img1, img2, img3 объекты, успешно заполненные, вы можете воспользоваться вышеуказанным исправлением.

Но я могу посоветовать вам, если вы не хотите больше неудобств при отображении изображений и значков в своем проекте, лучше поставитьих в пакете типа resources.images, а также создайте там класс Java и назовите его, например, Resources.java.

Затем вы можете создавать изображения, используя поток ресурсов Resources.java, который находится в том же пакете сизображения и значки:

package resources.images;

import java.net.URL;
import javax.swing.ImageIcon;

public class Resources {
    public static ImageIcon getImageIcon(String name) {
        URL imagePath = Resources.class.getResource(name);
        return new ImageIcon(imagePath);
    }
}

Тогда в вашем коде вы можете написать

ImageIcon img1 = Resources.getImageIcon("aib.jpg");

вместо

ImageIcon img1 = new ImageIcon("aib.jpg");

Таким образом, это будет работать, даже если вы упакуетеПриложение в виде файла JAR.

Надеюсь, это поможет.

...