簡體   English   中英

JButton需要顯示圖像數組

[英]JButton needs to display array of images

我有一組存儲在數組中的圖像,我需要像幻燈片一樣顯示它們。 下一個和上一個有兩個JButton允許用戶查看圖像。 但是我無法讓按鈕工作。 有什么建議嗎?

謝謝

import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JPanel;

public class slides extends JPanel implements ActionListener {

    // Data Field
    private final ImageIcon imageArray[];
    private ImageIcon image;

    JButton nextButton;
    JButton prevButton;

    int page = 0;
    int nextPage = page + 1;
    int prevPage = page - 1;
    int numOfSlides = 28;


    // Obtains and stores slides in imageArray
    public slides() {
        imageArray = new ImageIcon[numOfSlides];
        for (int i = 0; i < imageArray.length; i++) {
            imageArray[i] = new ImageIcon("Slide " + (i + 1) + ".png");
        }
    }

    // Displays slides
    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        boolean began = true;

        // creates next button
        nextButton = new JButton("next");
        nextButton.setBounds(400, 574, 70, 30);
        nextButton.addActionListener(this);
        add(nextButton);

        // creates previous button
        prevButton = new JButton("previous");
        prevButton.setBounds(0, 574, 85, 30);
        prevButton.addActionListener(this);
        add(prevButton);

        // displays slide 1
        if (began == true) {
            image = imageArray[page];
            image.paintIcon(this, g, 0, 0);
            began = false;
        }

        // displays other slides based on preference
        if (page == nextPage) {
            image = imageArray[page + 1];
            image.paintIcon(this, g, 0, 0);
            nextPage = page + 1;
            prevPage = page - 1;
        }
        if (page == prevPage) {
            nextPage = page + 1;
            prevPage = page - 1;
            image = imageArray[page - 1];
            image.paintIcon(this, g, 0, 0);
        }

        // Removes buttons accordingly
        if(page == imageArray.length - 1) {
            remove(nextButton);
        }
        if(page == 0){
            remove(prevButton);
        }
    }

    @Override
    public void actionPerformed(ActionEvent event) {
        if (event.getSource() == nextButton) {
            page++;
            image = imageArray[page];
        }
        if (event.getSource() == prevButton) {
            page--;
            image = imageArray[page];
        }
    }
}

有什么建議嗎?

  • 沒有必要覆蓋paintComponent() ; 相反,在現有的JLabel上使用setIcon() 這里引用一個完整的例子。

  • 不要使用setBounds() ; 相反, pack()封閉的Window讓組件采用他們的首選大小。

圖片

暫無
暫無

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

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