2014-12-04 2 views
3

У меня есть набор изображений, хранящихся в массиве, и мне нужно отображать их как слайд-шоу. Есть два JButtons next и previous, которые позволяют пользователю видеть изображения. Однако я не могу заставить кнопки работать. Любое предложение?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

+0

paintIcon означает, что вам нужно переопределить paintIcon, а затем paintComponent бесполезно – mKorbel

+0

удалить все из кода внутри paintComponent (может выполняться несколько раз в секунду). Отдых находится в учебнике Oracle. – mKorbel

ответ

4

Любое предложение?

  • Там нет необходимости переопределять paintComponent(); вместо этого используйте setIcon() на существующем JLabel. Приводится полный пример here.

  • Не использовать setBounds(); вместо этого, pack() прилагается Window, чтобы компоненты соответствовали их предпочтительным размерам.

image

Смежные вопросы