Change Images on jframe when a button is clicked in Java

Deadly 提交于 2021-02-05 10:54:16

问题


I have been trying to figure this out why not the next picture showing on the same panel after click the button. I want to separate those classes not into one class and used repaint() to re-invoke paintComponent() with the new pic.

Please help me. I am almost dying :(

  • when I run this, the first picture appears well. when the button is clicked to change the first picture to the second one, the Panel just keep on showing the first picture.

Thank you.

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.*;

class drawImage extends JPanel {

    BufferedImage[] b = new BufferedImage[2];

    public drawImage() {
        try {
            b[0] = ImageIO.read(new File("img/gameOn.png"));
            b[1] = ImageIO.read(new File("img/gameOff.png"));
        } catch (IOException e) {

            e.printStackTrace();
        }

    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        g.drawImage(b[0], 0, 0, null);

    }

    public void setNextImage(BufferedImage image) {

        b[0] = image;

        repaint();
    }

    public BufferedImage getB0() {
        return b[0];
    }

    public BufferedImage getB1() {
        return b[1];
    }

}// end drawImage

class clickedListener implements ActionListener {

    BufferedImage pre = new drawImage().getB0();
    BufferedImage next = new drawImage().getB1();

    @Override
    public void actionPerformed(ActionEvent e) {

        new drawImage().setNextImage(next);

    }

}

public class buttonFrame {
    public static void main(String[] args) throws IOException {
        JFrame jf = new JFrame("Button & Frame");
        JButton btn = new JButton("Click");

        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        jf.setLayout(new GridLayout(2, 0));
        jf.add(new drawImage());
        jf.add(btn);
        jf.setSize(200, 250);

        btn.addActionListener(new clickedListener());

    }

}

回答1:


Why not change your approach and make use of a JLabel instead? Set your image as an icon on the label and add it to your JPanel:

BufferedImage image = ImageIO.read(new File("image-path"));
JLabel label = new JLabel(new ImageIcon(image));
panel.add(label);

You can then make subsequent calls to JLabel#setIcon(...) each time you want the image to change.




回答2:


You can also use ImageIcon like this

image = new ImageIcon(imageList[1]);

and when each time button is clicked you can change image like this

label.setIcon(image);


来源:https://stackoverflow.com/questions/34063509/change-images-on-jframe-when-a-button-is-clicked-in-java

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!