1

我已经设法将图像添加到 netbeans 中的 JPanel 中并显示它。我想知道如何通过按下按钮进入下一个图像。

我使用以下代码添加了图像:

private void jButton1ActionPerformed(java.awt.event.ActionEvent  evt){                                         
    // TODO add your handling code here:
    JFileChooser fileChooser = new JFileChooser();
    int result = fileChooser.showOpenDialog(null);
    if ( result == JFileChooser.APPROVE_OPTION ){
         String Ruta = fileChooser.getSelectedFile().getAbsolutePath();
         jTextField1.setText(Ruta);
         Icon icon = new ImageIcon(Ruta);
         jLabel2.setIcon(icon);
         JOptionPane.showMessageDialog(this,"You chose to open this file: " + 
                    fileChooser.getSelectedFile().getName());  
    } 
}

当我按下一个名为“jButton2”的按钮来获取下一个图像时,无需从文件夹中再次手动选择它。

例如:

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt){                                         
     // TODO add your handling code here:       
} 

非常感谢您。

4

4 回答 4

2

您必须枚举您正在浏览的目录中的图像。当用户选择文件时,您应该保留该目录中所有图像的列表,以便在用户单击下一步按钮时检索它们。您也可以在用户单击下一步按钮时获取文件列表。

于 2012-06-05T12:34:09.267 回答
1

也许是这样的:

private File allFiles;
private int currentIndex;

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    JFileChooser fileChooser = new JFileChooser();
    int result = fileChooser.showOpenDialog(null);
    if ( result == JFileChooser.APPROVE_OPTION ){
            currentFile = fileChooser.getSelectedFile();
            String Ruta = currentFile.getAbsolutePath();
            jTextField1.setText(Ruta);
            allFiles = currentFile.getParent().listFiles(); // maybe you need a filter to include image files only....

            currentIndex = indexOf(allFiles, currentFile);

           Icon icon = new ImageIcon(Ruta);
                jLabel2.setIcon(icon);
                JOptionPane.showMessageDialog(this,"You chose to open this file: " + fileChooser.getSelectedFile().getName());  
    }

}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
    if (currentIndex+1 < allFiles.length) {
        jtextField1.setText(allFiles[++currentIndex]);
    }
}

private int indexOf(File[] files, File f) {
    for (int i=0; i+1 < files.length; i++)  {
       if (files[i].equals(f)) {
          return i;
       } 
    }
    return -1;
}
于 2012-06-05T12:48:24.870 回答
0

我假设您想要下一个图像,如果可能的话,在您在第一个代码摘录中选择的同一目录中。您可以做的是,一旦用户选择了图像,您就可以使用 Apache 的FileUtils来获取文件的扩展名。如果文件是JPG, JPEG,PNG等,您可以将其位置加载到字符串列表中。

这将为您提供图片路径列表。然后,您可以使用按钮遍历列表。按下按钮后,您将移至下一个项目,加载图像并渲染它。

编辑:这就是我将如何一步一步地去做:

  1. 创建一个 List 类型的全局变量。
  2. 创建一个作为计数器的全局变量;
  3. 在你的jButton1ActionPerformed方法中:
    • 获取用户选择的文件的父目录;
    • 使用 Apache 的FileUtil类来获取文件名的扩展名。如果文件名是图像,例如PNG,JPG等,请将其(该文件的路径)添加到您的列表中。
  4. 在 youjButton2ActionPerformed中,递增计数器(如果计数器不小于列表的大小,请将其重新初始化为 0,以避免OutOfBoundsExceptions)并使用与您的方法类似的逻辑加载由计数器表示的文件jButton1ActionPerformed
于 2012-06-05T12:34:25.110 回答
0
  • 如果当前图像 ( File.getParent()),则获取父文件。
  • 使用其中一种File.list..()方法获取图像文件。
  • 将它们按某种顺序排序,这对用户来说意味着“下一个”。
  • 迭代该连接,直到找到当前连接,File然后显示下一个连接。
于 2012-06-05T12:35:19.987 回答