FileDialog/ JFileChooser, Bilder laden, Dateifilter, Diashow

Status
Nicht offen für weitere Antworten.

Spaceangel

Mitglied
Hallo,

habe ein Menü (File -> New) gebastelt und will nun, dass, wenn ich auf "new" klicke sich ein Dialog öffnet wo ich mehrere Dateien auswählen kann (jpg oder jpeg).

habe dazu folgendes versucht:

Code:
public class newActionClass extends AbstractAction{
 publich newActionClass(String text, KeyStroke shortcut) {
  super(text);
  puValue(ACELERATOR_KEY, shortcut);
 }
 public void actionPerformed(ActionEvent e){
  
  FileDialog dlg = new FileDialog(new Frame(), "choose files");
   dlg.setMode(FileDialog.LOAD);
   dlg.setVisible(true);
 }
}

jedoch passiert nichts wenn ich auf "neu" klicke. Wo kann der Fehler liegen?

einen Listener habe ich wie folgt angebunden.

Code:
miNew = new MenuItem (resbundle.getString("..."));
miNew.setShourtcut(...);
fileMenu.add(miNew).setEnable(true);
miNew.addActionListener(newAction);

Wäre super wenn mir jemand helfen könnte.

Danke und viel Grüße,
Steffen
 

L-ectron-X

Gesperrter Benutzer
Wie man aus einem Frame heraus über ein Menü ein Datei-Dialog öffnet (AWT):

Java:
import java.awt.*;
import java.awt.event.*;

public class MyFrame extends Frame {
   private FileDialog fileDialog;
   private Menu fileMenu;
   private MenuItem fileMenuItem, exitMenuItem;
   private MenuBar menuBar;

   public MyFrame(String title) {
      super(title);
      setSize(600, 400);
      setLocationRelativeTo(null);
      addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent e) {
            exit();
         }
      });
      
      fileDialog = new FileDialog(this, "choose files", FileDialog.LOAD);
      menuBar = new MenuBar();
      fileMenu = new Menu("File");
      menuBar.add(fileMenu);
      fileMenuItem = new MenuItem("Open");
      fileMenu.add(fileMenuItem);
      fileMenuItem.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            openFileDialog();
         }
      });
      exitMenuItem = new MenuItem("Exit");
      exitMenuItem.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            exit();
         }
      });
      fileMenu.add(exitMenuItem);
      setMenuBar(menuBar);
      
   }
   
   private void openFileDialog() {
      fileDialog.setVisible(true);
   }
   
   private void exit() {
      System.exit(0);
   }
   
   public static void main(String[] args) {
      new MyFrame("MyFrame").setVisible(true);
   }

}

Es sind noch Dinge wie, ein Dateifilter und die Verarbeitung der ausgewählten Datei(en) zu implementieren.
Einen fertig implementierten Dateifilter findest du hier: http://www.java-forum.org/allgemeine-java-themen/20863-nur-javabeans-laden-dateifilter.html
Es sind dann sicher noch Anpassungen fällig.
 

Spaceangel

Mitglied
Hallo,
ich habe das alles mal versucht einzubauen und auch nur so zu verwenden, aber leider passiert jetzt gar nichts mehr. Ich bekomme eine Fehlermeldung das eien "Exception" aufgetreten ist aber mehr nicht. Es wird nur kurz das Fenster angezeigt, da kann ich OK anklicken und das wars.

Ich habe nicht wirklich Ahnung von Java (OOP Prinzipien sind mir bekannt und versteh ich auch - aber Java?!? :autsch: )

Was ich genau machen will ist, das ich eine bestimmte Anzahl von Bilder (JPG) einlesen will aus einem gewählten Verzeichnis und dann diese zusammensetzen möchte (nur immer die mittelste vertikale Pixellinie).

Dann soll das Bild gespeichert werden. Sind im Normalfall 720 Bilder.

Wie kann ich da in Java überhaupt den Ansatz finden das ich so etwas programmieren kann?


Danke, Steffen.
 

MPW

Top Contributor
Der Ansatz ist gut, nimm' nur besser swing:

Die groben Schritte:

du erzeugst eine Instanz und rufst in dieser die Methode zum Zeigen auf, den Returnwert fängst du am Besten als int auf.

Dann kannst du prüfen, ob Abbrechne oder OK geklickt wurde, und dann kriegt man noch die Dateien irgendwie raus...kenne gerade die Methoden nicht...guckst'e inne API!
 

L-ectron-X

Gesperrter Benutzer
So, hier mal ein ganz einfacher Bildbetrachter mit Diashow in Swing (mit Dateifilter für einige Grafikformate), welcher dir demonstrieren kann, wie man einen Dateiauswahldialog öffnen und Grafikdateien anzeigen kann.
Um den Bildbetrachter einfach zu halten, habe ich hier bewusst auf die Verwendung einer Collection-Datenstruktur verzichtet.

Klasse Bildbetrachter (allgemeines Benutzer-Interface)
Java:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;

public class Bildbetrachter extends JFrame implements Diashow {
   private JPanel p_btnPanel, p_picturePanel;
   private JButton btn_choose;
   private JButton btn_back;
   private JButton btn_next;
   private JButton btn_diashow;
   private JLabel l_picture, l_name;
   private JFileChooser chooser;
   private File[] pictures;
   private int index;
   private Timer timer;

   public Bildbetrachter(String title) {
      super(title);

      setSize(780, 585);
      setLocationRelativeTo(null);
      setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

      Container content = getContentPane(); //Für Java-Versionen unter 1.5

      l_name = new JLabel("Dateiname: ");

      p_btnPanel = new JPanel(new GridLayout(1, 3));

      //mit einem GridLayout könnten hier mehrere Bilder gleichzeitig angezeigt werden
      p_picturePanel = new JPanel(new BorderLayout());

      l_picture = new JLabel();
      l_picture.setHorizontalAlignment((int)JLabel.CENTER_ALIGNMENT);
      p_picturePanel.add(l_picture);

      btn_choose = new JButton("Bilder auswählen");
      btn_choose.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            btn_chooseClicked();
         }
      });
      p_btnPanel.add(btn_choose);

      btn_back = new JButton("<  Voriges Bild");
      btn_back.setEnabled(false);
      btn_back.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            btn_backClicked();
         }
      });
      p_btnPanel.add(btn_back);

      btn_next = new JButton("Nächstes Bild  >");
      btn_next.setEnabled(false);
      btn_next.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            btn_nextClicked();
         }
      });
      p_btnPanel.add(btn_next);
      
      btn_diashow = new JButton("Diashow");
      btn_diashow.setEnabled(false);
      btn_diashow.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("Diashow")) {
               startDiashow();
            }
            else if(e.getActionCommand().equals("Stopp")) {
               stopDiashow();
            }

         }
      });
      p_btnPanel.add(btn_diashow);

      content.add(l_name, BorderLayout.NORTH);
      content.add(new JScrollPane(p_picturePanel), BorderLayout.CENTER);
      content.add(p_btnPanel, BorderLayout.SOUTH);

      chooser = new JFileChooser();
      chooser.addChoosableFileFilter(new DateiFilter());
      chooser.setMultiSelectionEnabled(true); //Auswahl mehrerer Dateien erlauben
   }
   
   //Überschreibt Methode von Diashow
   public void nextPicture() {
      btn_nextClicked();
   }

   //FileChooser anzeigen, Dateien auswählen, erstes Bild anzeigen
   private void btn_chooseClicked() {
      int result = chooser.showDialog(this, "Auswählen");
      switch(result) {
         case JFileChooser.APPROVE_OPTION:
            pictures = chooser.getSelectedFiles();
            if(pictures == null) {
              return;
            }
            btn_next.setEnabled(true);
            btn_back.setEnabled(true);
            btn_diashow.setEnabled(true);
            index = 0;
            l_picture.setIcon(new ImageIcon(pictures[index].getAbsolutePath()));
            l_name.setText("Dateiname: "+pictures[index].getName());
      }
   }

   //voriges Bild anzeigen
   private void btn_backClicked() {
      index--;
      if(index < 0) {
         index = pictures.length-1;
      }
      l_picture.setIcon(new ImageIcon(pictures[index].getAbsolutePath()));
      l_name.setText("Dateiname: "+pictures[index].getName());
   }

   //nächstes Bild anzeigen
   private void btn_nextClicked() {
      index++;
      if(index > pictures.length-1) {
         index = 0;
      }
      l_picture.setIcon(new ImageIcon(pictures[index].getAbsolutePath()));
      l_name.setText("Dateiname: "+pictures[index].getName());
   }
   
   //Diashow starten
   private void startDiashow() {
      timer = new Timer(this, 5000);  //Wartezeit 5s
      timer.start();
      btn_diashow.setText("Stopp");
   }
   
   //Diashow stoppen
   private void stopDiashow() {
      timer.interrupt();
      btn_diashow.setText("Diashow");
   }

   //innere Klasse, realisiert einen Dateifilter für Standard-Grafikdateien
   class DateiFilter extends javax.swing.filechooser.FileFilter {
      public String getDescription() {
         return "Grafikdateien (*.gif, *.jpg, *.png)";
      }

      public boolean accept(File file) {
         if(file.isDirectory())
            return true;
         else if(file.getName().endsWith(".gif"))
            return true;
         else if(file.getName().endsWith(".jpg"))
            return true;
         else if(file.getName().endsWith(".png"))
            return true;
         else
            return false;
      }
   }

   public static void main(String[] args) {
      new Bildbetrachter("Einfacher Bildbetrachter").setVisible(true);
   }
}

Interface Diashow
Java:
public interface Diashow {
  public void nextPicture();
}

Klasse Timer
Java:
public class Timer extends Thread {
  private Diashow show;
  private long wait;
  
  public Timer(Diashow show, long wait) {
    this.show = show;
    this.wait = wait;
  }
  
  public void run() {
    while(!isInterrupted()) {
      try {
        Thread.sleep(wait);
        show.nextPicture();
      }
      catch(InterruptedException e) {
        interrupt();
      }
    }
  }
}

L-ectron-X hat diesen Beitrag editiert am 19.02.2006 um 15:48 Uhr.
Code um eine Diashow erweitert.
 
G

Guest

Gast
Hm, bei mir geht nur das laden des ersten Bildes, next oder back funktionieren nicht.

Wenn ich einen System.out in die next Methode setze ist index auch immer 0 .
 
G

Guest

Gast
Sorry, war ein Bedienfehler. Man muss mehrere Dateien selektieren. Dachte das geht wie bei Irfan View.
Danke, funktioniert! :) :toll:
 

Mike01

Mitglied
Hi,

das Beispiel ist toll. Hab aber eine kleine Frage.

Code:
dateiname.setText("Dateiname: "+datei.getName());

Mit diesen Code kann man sich ja den DateiNamen des Bildes ausgeben lassen. Wie muss in den Code erweitern
um mir auch die größe und breite eines Bildes anzeigen zu lassen ?
 

L-ectron-X

Gesperrter Benutzer
Was meinst du mit "größe"? Die Dimensionen oder die Dateilänge?
Die Breite kannst du mit getWidth() ermitteln.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JFileChooser <-> FileDialog Java Basics - Anfänger-Themen 4
N FileDialog - Detailansicht Java Basics - Anfänger-Themen 0
N Input/Output mit FileDialog Verzeichnis wechseln Java Basics - Anfänger-Themen 20
E FileDialog und der Dateityp Java Basics - Anfänger-Themen 33
G Filedialog und Mac OS X Leopard: Aktueller Pfad? Java Basics - Anfänger-Themen 3
G Nach MenuKlick FileDialog öffnen Java Basics - Anfänger-Themen 3
D FileDIalog klappt. aber geladenes bild nicht angezeigt Java Basics - Anfänger-Themen 2
A Filedialog Java Basics - Anfänger-Themen 3
O Bei FileDialog alten Inhalt löschen Java Basics - Anfänger-Themen 7
V Daten aus FileDialog verwenden Java Basics - Anfänger-Themen 4
P FileDialog Problem Java Basics - Anfänger-Themen 2
B Probleme mit Zugriff auf Dateisystem Windows 10 ( jFileChooser) Java Basics - Anfänger-Themen 17
M Interface JFileChooser vergrößern Java Basics - Anfänger-Themen 4
V Mehrere Dateien aus JFileChooser in eine ArrayList speichern Java Basics - Anfänger-Themen 2
O JFileChooser Verhalten -Pfad Java Basics - Anfänger-Themen 15
B JFileChooser und JList Java Basics - Anfänger-Themen 7
D Datei mit JFileChooser erstellen Java Basics - Anfänger-Themen 5
M Umgebungsvariable JFileChooser#setCurrentDirectory via Properties setzen? Java Basics - Anfänger-Themen 5
M JFileChooser Ordner auswählen Java Basics - Anfänger-Themen 5
E Bild per Verzeichnis/JFileChooser auf JPanel laden Java Basics - Anfänger-Themen 13
B JUnit für JFileChooser Java Basics - Anfänger-Themen 6
B FileWriter und JFileChooser zusammenfügen Java Basics - Anfänger-Themen 3
B Methoden JFileChooser und sein "Startverzeichnis" Java Basics - Anfänger-Themen 3
D JFileChooser & FileReader Java Basics - Anfänger-Themen 4
CR7 JFileChooser DateiÖffnen Java Basics - Anfänger-Themen 7
G JFileChooser "alle Dateien" unterbinden Java Basics - Anfänger-Themen 3
K Methoden JFileChooser Dateipfadübergabe Java Basics - Anfänger-Themen 5
S Wechselmedien in JFileChooser Java Basics - Anfänger-Themen 4
H speichern unter (JFileChooser) Java Basics - Anfänger-Themen 2
H JFileChooser... dateispeicherpfad selbst aussuchen Java Basics - Anfänger-Themen 4
M Bild aus URL via JFileChooser speichern Java Basics - Anfänger-Themen 10
D JFileChooser gewählte Datei "verwenden" Java Basics - Anfänger-Themen 2
I Probleme mit jFileChooser Java Basics - Anfänger-Themen 2
c_sidi90 Jfilechooser Problem Dateinamefeld Java Basics - Anfänger-Themen 11
D JFileChooser Java Basics - Anfänger-Themen 18
S JFileChooser - Dateinamen vorschlagen/Inhalt der Ausgabe prüfen Java Basics - Anfänger-Themen 3
Z JFileChooser/ Panel + Menüproblem Java Basics - Anfänger-Themen 3
Z CSV-Datei einlesen mit dem JFileChooser !!! Java Basics - Anfänger-Themen 5
A JFileChooser - ungefragtes überschreiben Java Basics - Anfänger-Themen 12
I (JFileChooser)Wie kann eine Jar auf Dateien eines bestimmten Ordners zugreifen? Java Basics - Anfänger-Themen 9
W JFileChooser - Eingebbare Zeichen begrenzen Java Basics - Anfänger-Themen 3
T Standardordner für JFileChooser festlegen Java Basics - Anfänger-Themen 2
R jFileChooser aus main- Programm aufrufen Java Basics - Anfänger-Themen 3
G Mehrere Dateien mit JFilechooser auswählen und öffnen. Java Basics - Anfänger-Themen 6
B Wie Dateitypauswahl in JFileChooser Opendialog begrenzen? Java Basics - Anfänger-Themen 2
M JFileChooser Dateityp vorbelgen Java Basics - Anfänger-Themen 3
G Mit jFileChooser Pfad rauskriegen? Java Basics - Anfänger-Themen 3
A JFileChooser soll sich letzten ordner merken Java Basics - Anfänger-Themen 4
D Vorschau bei jfilechooser? Java Basics - Anfänger-Themen 3
G JFileChooser - Change Icon Problem! Java Basics - Anfänger-Themen 2
J Wait_Cursor beim JFileChooser? Java Basics - Anfänger-Themen 8
G JFileChooser übergabe an Directory Java Basics - Anfänger-Themen 4
X JFileChooser Auswahl Java Basics - Anfänger-Themen 4
A JFileChooser DefaultDirectorie Java Basics - Anfänger-Themen 7
G jFileChooser speichern + Fehlermeldung Java Basics - Anfänger-Themen 10
S JFileChooser konfigurieren Java Basics - Anfänger-Themen 6
M JFileChooser, Nur im C:Programme Java Basics - Anfänger-Themen 5
A JFileChooser Darstellung Java Basics - Anfänger-Themen 3
G jFileChooser auf den Abbrechen-Button reagieren Java Basics - Anfänger-Themen 3
R JFileChooser hängt java Programm auf Java Basics - Anfänger-Themen 6
S JFileChooser öffnet Unterverzeichnisse sehr langsam Java Basics - Anfänger-Themen 2
O JFileChooser Filter an Dateinamen hängen Java Basics - Anfänger-Themen 4
G speichern mit JFileChooser Java Basics - Anfänger-Themen 2
G jFileChooser Java Basics - Anfänger-Themen 8
G JFileChooser - Anzeige beschleunigen Java Basics - Anfänger-Themen 2
G JFileChooser kommt doppelt Java Basics - Anfänger-Themen 3
2 JFileChooser- Dateien nur als bestimmte Formate speichern Java Basics - Anfänger-Themen 4
E JFileChooser -> Verzeichnis setzen Java Basics - Anfänger-Themen 10
E JFileChooser- Dateiname Feld? Java Basics - Anfänger-Themen 2
B JFileChooser problem Java Basics - Anfänger-Themen 3
N immer als *.xml speichern (jfilechooser) Java Basics - Anfänger-Themen 2
P Problem mit JFileChooser und FileFilter Java Basics - Anfänger-Themen 8
D Pfad-Auswahl mit dem JFileChooser Java Basics - Anfänger-Themen 8
H JFileChooser Problem Java Basics - Anfänger-Themen 3
B JFileChooser Abfrage für Datei speichern Java Basics - Anfänger-Themen 3
G Jfilechooser ordner auswählen? Java Basics - Anfänger-Themen 2
D JFileChooser Darstellung ändern? Java Basics - Anfänger-Themen 4
G JFileChooser EventListener auf Öffnen Button Java Basics - Anfänger-Themen 3
J NetBeans und JFileChooser Java Basics - Anfänger-Themen 4
M JFileChooser Überschreiben Dialog? Java Basics - Anfänger-Themen 2
M JFileChooser - Dateiendung vorgeben? Java Basics - Anfänger-Themen 13
G JFileChooser - Datei speichern Java Basics - Anfänger-Themen 9
P JFileChooser soll nur .txt files anzeigen Java Basics - Anfänger-Themen 5
P JFileChooser: Methode: setCurrentDirectoy (File Dir) gehtNet Java Basics - Anfänger-Themen 2
F JFileChooser Java Basics - Anfänger-Themen 33
S BufferedReader (JFileChooser) Java Basics - Anfänger-Themen 2
H JFileChooser - FileFilter Java Basics - Anfänger-Themen 2
T neue Instanz von JFileChooser => applikation friert ein Java Basics - Anfänger-Themen 2
B JFileChooser für Files and Directories Java Basics - Anfänger-Themen 3
S Probleme mit JFileChooser! Java Basics - Anfänger-Themen 4
M JFileChooser Directory setzen Java Basics - Anfänger-Themen 6
M JFileChooser Rückgabewert Java Basics - Anfänger-Themen 2
T JFileChooser für Ordner Java Basics - Anfänger-Themen 7
S Größe einer Datei, JFileChooser Java Basics - Anfänger-Themen 5
G Frage zum jFileChooser.showSaveDialog Java Basics - Anfänger-Themen 2
J JFileChooser Java Basics - Anfänger-Themen 4
Butzibu Image Loader lädt nicht alle Bilder: Java Basics - Anfänger-Themen 4
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
S Aktuell beste Methode um zwei Bilder zu vergleichen..? Java Basics - Anfänger-Themen 1
W Java in Exe Datei umgewandelt, Ressourcen fehlen (Bilder und Audiodateien) Java Basics - Anfänger-Themen 1

Ähnliche Java Themen

Neue Themen


Oben