2013-06-22 3 views
-1

Теперь я показываю изображение на экране. Я хочу нажать Jbutton и отобразить следующее изображение в этом каталоге. И другая кнопка (предыдущая) должна отображать предыдущее изображение. Все это в петле. Таким образом, первое изображение отображается после последнего изображения каталога. Это мой код до сих пор:Получить следующее изображение в каталоге при нажатии JButton - Swing

import java.awt.*; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.awt.event.KeyEvent; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import javax.imageio.ImageIO; 
import javax.swing.*; 
import javax.swing.filechooser.FileFilter; 
import net.miginfocom.swing.MigLayout; 

class ImageFilter extends FileFilter { 

@Override 
public boolean accept(File f) { 
    if (f.isDirectory()) { 
     return true; 
    } 
    String name = f.getAbsolutePath(); 
    if (name.matches(".*((.jpg)|(.gif)|(.png))")) 
     return true; 
    else 
     return false; 
} 

@Override 
public String getDescription() { 
    return "Image Files(*.jpg, *.gif, *.png)"; 
} 

} 

@SuppressWarnings("serial") 
class bottompanel extends JPanel { 
JButton prev, next; 

bottompanel() { 
    this.setLayout(new MigLayout("debug", "45%[center][center]", "")); 

    prev = new JButton("Previous"); 
    next = new JButton("Next"); 
    next.addActionListener(new ActionListener(){ 
     public void actionPerformed(ActionEvent ae){ 

     } 
    }); 
    this.add(prev, " w 100!"); 
    this.add(next, "w 100!"); 
} 
} 

@SuppressWarnings("serial") 
class imgpanel extends JPanel { 
imgpanel(JLabel image) { 
    this.setLayout(new MigLayout("debug", "", "")); 
    this.add(image, "push,align center"); 
} 
} 

@SuppressWarnings("serial") 
class DispImg extends JFrame { 
JMenuBar jmenubar; 
JMenu jmenu; 
JMenuItem jopen, jexit; 
JLabel image; 
BufferedImage img, dimg; 

DispImg() { 

    // initializing the Frame 
    this.setTitle("Display Test"); 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setExtendedState(JFrame.MAXIMIZED_BOTH); 
    this.setLayout(new MigLayout("debug", "[fill,grow]", "[]push[]")); 
    this.setLocationByPlatform(true); 
    this.setMinimumSize(new Dimension(800, 600)); 
    this.setVisible(true); 
    this.setResizable(false); 

    // create label 
    image = new JLabel(" "); 
    //add label to panel 
    this.add(new imgpanel(image), "wrap"); 

    //add buttons to bottompanel 
    this.add(new bottompanel(), "gaptop 10"); 

    // Making Menubar 
    jmenubar = new JMenuBar(); 
    jmenu = new JMenu("File"); 
    jopen = new JMenuItem("Open"); 
    jopen.setMnemonic(KeyEvent.VK_O); 
    KeyStroke key1 = KeyStroke.getKeyStroke(KeyEvent.VK_O, Event.CTRL_MASK); 
    jopen.setAccelerator(key1); 
    jopen.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent ae) { 
      JFileChooser fc = new JFileChooser(); 
      fc.setFileFilter(new ImageFilter()); 
      int result = fc.showOpenDialog(null); 
      if (result == JFileChooser.APPROVE_OPTION) { 
       File file = fc.getSelectedFile(); 
       try { 
        img = ImageIO.read(file); 
        float width = img.getWidth(); 
        float height = img.getHeight(); 
        if (img.getHeight() > 500 && (width/height) > 1) { 
         Image thumb = img.getScaledInstance(-1, 620, 
           Image.SCALE_SMOOTH); 
         image.setIcon(new ImageIcon(thumb)); 
        } else if (img.getHeight() > 500 
          && (width/height) <= 1) { 
         Image thumb = img.getScaledInstance(460, -1, 
           Image.SCALE_SMOOTH); 
         image.setIcon(new ImageIcon(thumb)); 
        } else { 
         image.setIcon(new ImageIcon(img)); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }); 
    jexit = new JMenuItem("Exit"); 
    jexit.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent ae) { 
      System.exit(0); 
     } 
    }); 
    jmenu.add(jopen); 
    jmenu.addSeparator(); 
    jmenu.add(jexit); 
    jmenubar.add(jmenu); 
    this.setJMenuBar(jmenubar); 
} 

public static void main(String s[]) { 
    SwingUtilities.invokeLater(new Runnable() { 
     public void run() { 
      new DispImg(); 
     } 
    }); 
} 
} 
+0

'' Это мой код до сих пор: ... "' - Хорошо, так что же ваш * конкретный вопрос? Насколько написано, ваш вопрос - это нечто большее, чем «дамп кода», «вот мой код, пожалуйста, исправьте его». Чтобы получить лучший ответ, опишите все детали, которые вы точно застряли. Мы лучше отвечаем на вопросы, а не на исправление кода. –

+0

Во-первых, сообщите нам *, что не так * с вашим текущим кодом, * что отсутствует *, какие ошибки вы можете видеть, ... –

+0

Не знаете, как получить следующее изображение из каталога. когда я добавил actionListener() на следующей кнопке, ничего не произошло, и новое изображение не отображается. Никаких исключений не было, нажатие следующего/предыдущего должно отображаться на изображениях, но это не происходит. – crazy4

ответ

2

, когда я добавил ActionListener() на следующей кнопки ничего не произошло, и новый образ не отображается

У вас нет никакого кода в ActionListener , поэтому я не уверен, что вы ожидаете.

Не знаю, как извлечь следующее изображение из каталога

Вы бы, вероятно, использовать JFileChooser для выбора каталога (и, возможно, исходное изображение для отображения).

Как только у вас есть каталог, вы можете использовать метод File.listFiles(...), чтобы получить список всех файлов изображений в каталоге. Затем ваша кнопка Next/Previous добавит/вычитает один для доступа к следующему/предыдущему файлу в массиве.