簡體   English   中英

在 Java 中單擊按鈕時更改 jframe 上的圖像

[英]Change Images on jframe when a button is clicked in Java

我一直試圖弄清楚為什么單擊按鈕后下一張圖片不顯示在同一面板上。 我想將這些類分開而不是一個類,並使用 repaint() 用新圖片重新調用paintComponent()。

請幫我。 我快要死了:(

  • 當我運行它時,第一張圖片看起來很好。 單擊按鈕將第一張圖片更改為第二張圖片時,面板只會繼續顯示第一張圖片。

謝謝你。

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());

    }

}

為什么不改變您的方法並改用 JLabel 呢? 將您的圖像設置為標簽上的圖標並將其添加到您的 JPanel:

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

然后,您可以在每次希望更改圖像時對JLabel#setIcon(...)進行后續調用。

你也可以像這樣使用 ImageIcon

image = new ImageIcon(imageList[1]);

每次單擊按鈕時,您都可以像這樣更改圖像

label.setIcon(image);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM