2014-12-04 81 views
3

我有一組圖像存儲在一個數組中,我需要像幻燈片一樣顯示它們。有兩個JButton可以讓用戶看到圖像。但是我無法使按鈕工作。任何建議?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]; 
     } 
    } 
} 
+0

什麼是完全相同的問題,也就是你所說的「不能讓這些按鈕的工作」是什麼意思?你能向我們展示一個[MCVE](http://stackoverflow.com/help/mcve)嗎? – BluesSolo 2014-12-04 11:02:07

+0

paintIcon意思是你必須重寫paintIcon,那麼paintComponent就沒用了 – mKorbel 2014-12-04 11:04:53

+0

從paintComponent裏面的代碼中刪除一切(可以每秒執行幾次)其餘的是在Oracle教程 – mKorbel 2014-12-04 11:06:09

回答

4

什麼建議嗎?

  • 沒有必要重寫paintComponent();相反,在現有的JLabel上使用setIcon()。一個完整的例子被引用爲here

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

image