# mehrere Bilder öffnen, aber wie?



## anfänger15 (20. Feb 2007)

Hallo
ich will ein Programm programmieren mit dem es möglich ist mehrere Bilder zu laden und dann mit Pfeilen zwischen den Bildern zu wechseln

ich hab das laden mit folgendem Dialog versucht:
	
	
	
	





```
FileDialog d = new FileDialog(this,"Bilddatei laden",
                               FileDialog.LOAD);
d.setVisible(true);
name = d.getDirectory();
name += d.getFile();

if (name == null) 
return;
```

Damit kann man aber nur ein Bild laden.
Hat jemand eine Idee wie das geht.

Jetzt schon mal danke


----------



## The_S (20. Feb 2007)

Verwende einen JFileChooser und setze setMultiSelectionEnabled auf true. Oder hat es einen bestimmten Grund warum du den veralteten FileDialog aus AWT verwendest?


----------



## anfänger15 (20. Feb 2007)

Nein eigentlich gibt es kein Grund warum ich den FileDialog benutze
danke für deine Antwort hat mir weitergeholfen


----------



## anfänger15 (20. Feb 2007)

Also ich hab das jetzt mal so versucht ( der ganze Quelltext) 
	
	
	
	





```
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import java.io.*;
import java.io.File; 
import javax.swing.JFileChooser;

public class Bildbetrachter extends JFrame {
 static Bildbetrachter fenster;
 Image[] Bild;
 int x_pos,y_pos;
 String name;
static CBildLeinwand bildanzeige;
ImageIcon tmp;
int i =0;
int a = i;

  int bild_x1,bild_y1;        // die aktuelle Begrenzung 
  int bild_x2,bild_y2;        // des Bildes
  int bildBreite,bildHoehe;
  

 class ActionLauscher implements ActionListener {
   public void actionPerformed(ActionEvent e) {
   String Label;
  
   Label = e.getActionCommand();

   if (Label.equals("Bild laden"))
     laden();


   if (Label.equals("beenden"))
     System.exit(0);

if(Label.equals("weiter")){
	i++;
	}
	

if(Label.equals("zurück")){
	i--;
}
	
   }
}

 Bildbetrachter (String titel) {
  super(titel);

x_pos = y_pos = 0;
bild_x1 = bild_x2 = bild_y1 = bild_y2 = 0;

name = null;
Bild = null;

setLayout(new BorderLayout());

bildanzeige  = new CBildLeinwand();
add(bildanzeige,BorderLayout.NORTH);
bildanzeige.setBackground(Color.white);

JPanel Button = new JPanel();
JButton weiter = new JButton("weiter");
JButton zurück = new JButton("zurück");

Button.add(zurück);
Button.add(weiter);
add(Button,BorderLayout.SOUTH);
weiter.addActionListener(new ActionLauscher());
zurück.addActionListener(new ActionLauscher());
JScrollPane listenScrollPane = new javax.swing.JScrollPane();
listenScrollPane.setViewportView(bildanzeige);
add(listenScrollPane);   



JMenuBar menuleiste = new JMenuBar();
setJMenuBar(menuleiste);

JMenu menu = new JMenu("Datei"); //menu erstellen

JMenuItem laden = new JMenuItem("Bild laden"); //Menubutton laden
laden.addActionListener(new ActionLauscher());


JMenuItem beenden = new JMenuItem("beenden");
beenden.addActionListener(new ActionLauscher());
menu.add(laden);

menu.add(beenden);
menuleiste.add(menu);

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

}
public void laden(){
	
	
	 JFileChooser chooser = new JFileChooser();
  chooser.setMultiSelectionEnabled(true);
  if (chooser.showOpenDialog(bildanzeige) == 
                                JFileChooser.APPROVE_OPTION){

                    	
                                	
File[] dateiweg = chooser.getSelectedFiles();
String name1 = "nothing";
if (dateiweg.length>0){ 
name1 = dateiweg[0].getName();
}

for (int i=1; i<dateiweg.length;i++){
   name1 += "," + dateiweg[i].getName();

}
name = name1;

}
	
 
if (name == null) 
return;

 

Bild[i-1] = getToolkit().getImage(name);
MediaTracker mt = new MediaTracker(this);
mt.addImage(Bild[i-1], 0);
try{
	mt.waitForAll();
}
catch (InterruptedException e) {
}



	

 bildBreite = Bild[i-1].getWidth(bildanzeige);
 bildHoehe = Bild[i-1].getHeight(bildanzeige);

bild_x1 = x_pos;
bild_y1 = y_pos;
bild_x2 = bild_x1 + bildBreite;
bild_y2 = bild_y1 + bildHoehe;
bildanzeige.setSize(bildBreite,bildHoehe);
bildanzeige.repaint();
}





public static void main(String[] args){
fenster = new Bildbetrachter("Bildbetrachter");
fenster.setSize(900,600);
bildanzeige.setSize(900,600);
fenster.pack();
fenster.setLocation(30,50);
fenster.setVisible(true);
}

 class CBildLeinwand extends JPanel {
    // Panel neu zeichnen
    public void paintComponent(Graphics g) {
      super.paintComponent(g);

      // Falls ein Bild geladen ist, das Bild anzeigen
      if(Bild != null)
        g.drawImage(Bild[i-1],x_pos,y_pos,this);
       
    }

  


    public Dimension getMinimumSize() {
      return fenster.getSize();
    }
    public Dimension getPreferredSize() {
       return bildanzeige.getSize();
    }
    
}

}
```

Da ist aber irgendwo ein Fehler drin. Ich vermute es hat irgendwas mit den Arrays zu tun, denn wenn ich das Image nicht als Array benutze dann geht es. Kann mir bite jemand helfen?
DANKE


----------



## anfänger15 (20. Feb 2007)

Bei dem JFileChooser kann ich aber auch nicht in dem Dialog mit der maus mehrere Bilder auswählen oder?


----------



## The_S (21. Feb 2007)

anfänger15 hat gesagt.:
			
		

> Da ist aber irgendwo ein Fehler drin. Ich vermute es hat irgendwas mit den Arrays zu tun, denn wenn ich das Image nicht als Array benutze dann geht es. Kann mir bite jemand helfen?
> DANKE



WAS geht nicht?



			
				anfänger15 hat gesagt.:
			
		

> Bei dem JFileChooser kann ich aber auch nicht in dem Dialog mit der maus mehrere Bilder auswählen oder?



Wenn du die von mir genannte Methode auf true gesetzt hast => doch, eigentlich schon!


----------



## L-ectron-X (21. Feb 2007)

@anfänger15: Ich hab mal vor einiger Zeit einen Bildbetrachter mit Diashow zu Demozwecken gepostet. Vielleicht kannst du daraus ein paar Dinge entnehmen: http://www.java-forum.org/java-basi...der-laden-dateifilter-diashow.html#post136877


----------



## anfänger15 (21. Feb 2007)

wenn das Image kein Array ist wird es angezeigt.Wenn es aber ein Array ist wird nichts angezeigt 
und es kommt folgende Fehlermeldung:


```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at Bildbetrachter.laden(Bildbetrachter.java:124)
        at Bildbetrachter$ActionLauscher.actionPerformed(Bildbetrachter.java:34)

        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.AbstractButton.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI.doClick(Unknown Source)
        at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(Unknown
Source)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
```


ich hab die  genannte Methode auf true gesetzt, dann kann ich aber auch nicht so wie bei Windows mit der Maus drauf bleiben und mehrere Dinge markieren, die dann alle geöfnet werden sollten oder?


----------



## The_S (21. Feb 2007)

Poste mal Zeile 124 in deiner bildbetrachter Methode.

Mit der Maus nicht, aber mit der Tastatur. Bzw. schon mit der Maus wenn du STRG gedrückt hältst.


----------



## anfänger15 (21. Feb 2007)

ah ok mein Fehler geht doch mehrere auszuwählen

hier die Zeile:

```
Bild[i] = getToolkit().getImage(name);
```

ich denke aber eher das es irgendwo hier liegt
	
	
	
	





```
// Panel neu zeichnen
    public void paintComponent(Graphics g) {
      super.paintComponent(g);

      // Falls ein Bild geladen ist, das Bild anzeigen
      if(Bild != null)
        g.drawImage(Bild[i],x_pos,y_pos,this);
  
}
```

Weil wenn ich schreib if(Bild_ != null) dann ladet die ganze GUI nicht richtig

Hoffe "wir" bekommen das noch hin_


----------



## The_S (21. Feb 2007)

Hast du dein Array "Bild" (btw, Variablennamen schreibt man klein) nicht initialisiert? Existiert der Pfad zu dem Bild auch wirklich?


----------



## anfänger15 (21. Feb 2007)

Hier nochmal der ganze Quelltext:
	
	
	
	





```
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import java.io.*;
import java.io.File; 
import javax.swing.JFileChooser;

public class Bildbetrachter extends JFrame {
 static Bildbetrachter fenster;
 Image[] Bild;

 int x_pos,y_pos;
 String name;
static CBildLeinwand bildanzeige;
int i =1;
int a = i;
private JFileChooser chooser; 

  int bild_x1,bild_y1;        // die aktuelle Begrenzung 
  int bild_x2,bild_y2;        // des Bildes
  int bildBreite,bildHoehe;


   

 class ActionLauscher implements ActionListener {
   public void actionPerformed(ActionEvent e) {
   String Label;

   Label = e.getActionCommand();

   if (Label.equals("Bild laden")){
     laden();
    
}

   if (Label.equals("beenden"))
     System.exit(0);

if(Label.equals("weiter")){
	i++;
	  System.out.print(name);
	}
	

if(Label.equals("zurück")){
	i--;
}
	
   }
}

 Bildbetrachter (String titel) {
  super(titel);

x_pos = y_pos ;
bild_x1 = bild_x2 = bild_y1 = bild_y2;

name = null;
Bild = null;

setLayout(new BorderLayout());

bildanzeige  = new CBildLeinwand();
add(bildanzeige,BorderLayout.NORTH);
bildanzeige.setBackground(Color.white);
JPanel Button = new JPanel();
JButton weiter = new JButton("weiter");
JButton zurück = new JButton("zurück");

Button.add(zurück);
Button.add(weiter);
add(Button,BorderLayout.SOUTH);
weiter.addActionListener(new ActionLauscher());
zurück.addActionListener(new ActionLauscher());

JScrollPane listenScrollPane = new javax.swing.JScrollPane();
listenScrollPane.setViewportView(bildanzeige);
add(listenScrollPane);   



JMenuBar menuleiste = new JMenuBar();
setJMenuBar(menuleiste);

JMenu menu = new JMenu("Datei"); //menu erstellen

JMenuItem laden = new JMenuItem("Bild laden"); //Menubutton laden
laden.addActionListener(new ActionLauscher());


JMenuItem beenden = new JMenuItem("beenden");
beenden.addActionListener(new ActionLauscher());
menu.add(laden);

menu.add(beenden);
menuleiste.add(menu);

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

}
public void laden(){

  chooser = new JFileChooser();
  chooser.setMultiSelectionEnabled(true);
  if (chooser.showOpenDialog(bildanzeige) == 
                                JFileChooser.APPROVE_OPTION){

                    	
                                	
File[] dateiweg = chooser.getSelectedFiles();
if (dateiweg == null) {
return;
}
 if(dateiweg.length>0)
   name = dateiweg[0].getName();
       
  for(int i=0;i<dateiweg.length;i++)
 {
           name = dateiweg[i].getAbsolutePath();
           
           
Bild[i] = getToolkit().getImage(name);
}
}
MediaTracker mt = new MediaTracker(this);
mt.addImage(Bild[i], 0);
try{
	mt.waitForAll();
}
catch (InterruptedException e) {
}
	

 bildBreite = Bild[i].getWidth(bildanzeige);
 bildHoehe = Bild[i].getHeight(bildanzeige);

bild_x1 = x_pos;
bild_y1 = y_pos;
bild_x2 = bild_x1 + bildBreite;
bild_y2 = bild_y1 + bildHoehe;
bildanzeige.setSize(bildBreite,bildHoehe);
bildanzeige.repaint();
}





public static void main(String[] args){
fenster = new Bildbetrachter("Bildbetrachter");
fenster.setSize(900,600);
bildanzeige.setSize(900,600);
fenster.pack();
fenster.setLocation(30,50);
fenster.setVisible(true);

}

 class CBildLeinwand extends JPanel {

 	
 	
    // Panel neu zeichnen
    public void paintComponent(Graphics g) {
      super.paintComponent(g);

      // Falls ein Bild geladen ist, das Bild anzeigen
      if(Bild != null)
        g.drawImage(Bild[i],x_pos,y_pos,this);
       
    

  
}

    public Dimension getMinimumSize() {
      return fenster.getSize();
    }
    public Dimension getPreferredSize() {
       return bildanzeige.getSize();
    }
    
}

}
```

Den Pfad wähle ich ja mit dem Dialog aus und wenn das Image (Bild) kein Array ist geht es nur wenn es ein Array ist
geht es nicht

Hoffe der gesamte Quelltext hilft euch mir weiter zu helfen


----------



## Marco13 (21. Feb 2007)

Wennn du in der "laden"-Methode die markierte Zeile einfügst

```
if(dateiweg.length > 0)
                name = dateiweg[0].getName();


            Bild = new Image[dateiweg.length]; //------------------!!!
            for(int i = 0; i < dateiweg.length; i++)
            {
                name = dateiweg[i].getAbsolutePath();
```
und bei allen Stellen, wo danach 
Bild[ i ]
steht stattdessen
Bild[0]
schreibst, kann man zumindest schonmal EIN Bild laden und ansehen. Ansonsten solltest du dir klar machen, WANN du WELCHES Bild meinst, wenn du von "Bild[ i ]" redest, und wann du den _Array_ meinst, und wann einen _Eintrag_ des Arrays: Die if-Abfrage bei

```
if(Bild != null)
        g.drawImage(Bild[i],x_pos,y_pos,this);
```
macht keinen sinn: "Bild" ist ein Array. Der Array kann ungleich 'null' sein. Das heißt aber nicht, dass auch die _Einträge_ des Arrays ungleich null sind:

```
Image bild[] = null;
bild = new Image[10];
if (bild != null) { /* ist jetzt erfüllt: Der Array ist nicht null. */ }
if (bild[0] != null) { /* ist jetzt NICHT erfüllt: Der Eintrag ist noch null */ }
```


Die "static"-Variablen solltest du NICHT-static machen. 

Variablennamen schreibt man klein.

Und Klassenvariablen sollten NIE (NIE NIE NIE) solche Namen wie "i" oder "a" haben!!! Stattessen sollte "i" bei dir z.B. "currentImageIndex" (oder so) heißen.


----------



## anfänger15 (22. Feb 2007)

ok es funktioniert wenn ich alle darunter auf Bild[0] setze, aber dann kann ich ja nicht zwischen den Bildern wechseln.

mag schon sein das die if-frage kein Sinn macht, wenn ich sie aber weglasse läd die gesamte GUI nicht richtig.
Warum?


----------



## Marco13 (22. Feb 2007)

Vermutlich gibt es dann auch (an anderer Stelle, oder schon früher) eine NullPointerException. Wie gesagt: Überleg' dir, was du wann mit welchem Bild (oder mit dem Array) machen willst. Wenn du das Bild 
Bild[currentImageIndex]
anzeigen willst, dann muss der Array nicht-null und groß genug sein, und das Bild[currentImageIndex] sollte nach Möglichkeit auch nicht-null sein.


----------



## Marco13 (22. Feb 2007)

Um der zu erwartenden Nachfrage entgegen zu wirken :roll:


```
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import java.io.*;
import java.io.File;
import javax.swing.JFileChooser;

public class Bildbetrachter extends JFrame
{
    static Bildbetrachter fenster;
    Image[] Bild;

    int x_pos, y_pos;
    String name;
    static CBildLeinwand bildanzeige;
    int i = 1;
    int a = i;
    private JFileChooser chooser;

    int bild_x1, bild_y1; // die aktuelle Begrenzung
    int bild_x2, bild_y2; // des Bildes
    int bildBreite, bildHoehe;


    class ActionLauscher implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            String Label;

            Label = e.getActionCommand();

            if(Label.equals("Bild laden"))
            {
                laden();

            }

            if(Label.equals("beenden"))
                System.exit(0);

            if(Label.equals("weiter"))
            {
                i++;
                System.out.print(name);
            }


            if(Label.equals("zurück"))
            {
                i--;
            }
            repaint();

        }
    }

    Bildbetrachter(String titel)
    {
        super(titel);

        x_pos = y_pos;
        bild_x1 = bild_x2 = bild_y1 = bild_y2;

        name = null;
        Bild = null;

        setLayout(new BorderLayout());

        bildanzeige = new CBildLeinwand();
        add(bildanzeige, BorderLayout.NORTH);
        bildanzeige.setBackground(Color.white);
        JPanel Button = new JPanel();
        JButton weiter = new JButton("weiter");
        JButton zurück = new JButton("zurück");

        Button.add(zurück);
        Button.add(weiter);
        add(Button, BorderLayout.SOUTH);
        weiter.addActionListener(new ActionLauscher());
        zurück.addActionListener(new ActionLauscher());

        JScrollPane listenScrollPane = new javax.swing.JScrollPane();
        listenScrollPane.setViewportView(bildanzeige);
        add(listenScrollPane);


        JMenuBar menuleiste = new JMenuBar();
        setJMenuBar(menuleiste);

        JMenu menu = new JMenu("Datei"); //menu erstellen

        JMenuItem laden = new JMenuItem("Bild laden"); //Menubutton laden
        laden.addActionListener(new ActionLauscher());


        JMenuItem beenden = new JMenuItem("beenden");
        beenden.addActionListener(new ActionLauscher());
        menu.add(laden);

        menu.add(beenden);
        menuleiste.add(menu);

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

    }

    public void laden()
    {

        chooser = new JFileChooser();
        chooser.setMultiSelectionEnabled(true);
        if(chooser.showOpenDialog(bildanzeige) ==
           JFileChooser.APPROVE_OPTION)
        {


            File[] dateiweg = chooser.getSelectedFiles();
            if(dateiweg == null)
            {
                return;
            }
            if(dateiweg.length > 0)
                name = dateiweg[0].getName();


			Bild = new Image[dateiweg.length];
            for(int i = 0; i < dateiweg.length; i++)
            {
                name = dateiweg[i].getAbsolutePath();

                MediaTracker mt = new MediaTracker(this);
                Bild[i] = getToolkit().getImage(name);
                mt.addImage(Bild[i], 0);
                try
                {
                    mt.waitForAll();
                }
                catch(InterruptedException e)
                {
                }
            }
        }


        bildBreite = Bild[0].getWidth(bildanzeige);
        bildHoehe = Bild[0].getHeight(bildanzeige);

        bild_x1 = x_pos;
        bild_y1 = y_pos;
        bild_x2 = bild_x1 + bildBreite;
        bild_y2 = bild_y1 + bildHoehe;
        bildanzeige.setSize(bildBreite, bildHoehe);
        bildanzeige.repaint();
    }


    public static void main(String[] args)
    {
        fenster = new Bildbetrachter("Bildbetrachter");
        fenster.setSize(900, 600);
        bildanzeige.setSize(900, 600);
        fenster.pack();
        fenster.setLocation(30, 50);
        fenster.setVisible(true);

    }

    class CBildLeinwand extends JPanel
    {


        // Panel neu zeichnen
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);

            // Falls ein Bild geladen ist, das Bild anzeigen
            if(Bild != null && i>=0 && i < Bild.length && Bild[i] != null) // Bockmist
                g.drawImage(Bild[i], x_pos, y_pos, this);


        }

        public Dimension getMinimumSize()
        {
            return fenster.getSize();
        }

        public Dimension getPreferredSize()
        {
            return bildanzeige.getSize();
        }

    }

}
```


----------



## anfänger15 (22. Feb 2007)

Danke an alle die mir so tatkräftig geholfen haben 

und für die Zeile
	
	
	
	





```
if(Bild != null && i>=0 && i < Bild.length && Bild[i] != null)
```

durch die mein programm jetzt endlich läuft


----------



## Marco13 (22. Feb 2007)

Du solltest aber die Punkte, die in diesem Thread sonst noch erwähnt wurden, berücksichtigen. Und in erwägung ziehen, ob es nicht Sinn machen würde, "i" nur zu verringern, wenn es nicht schon 0 ist, und nur zu vergrößern, wenn es noch nicht Bild.length-1 ist...


----------



## anfänger15 (22. Feb 2007)

Da durch den Quellcode den ich bisher hatte(bei dem alle Bilder die man sehen will geladen werden) bei mehreren geladenen Bildern der Fehler java.lang.OutOfMemoryError auftrit hab ich mich entschlossen nur das Bild zu laden das auch angezeigt wird. Für alle die auch mal so etwas programmieren wollen hier der Quelltext:
	
	
	
	





```
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import java.io.*;
import java.io.File; 
import javax.swing.JFileChooser;

public class Bildbetrachter extends JFrame {
 static Bildbetrachter fenster;
 Image bild;

int index = 0;
 int x_pos,y_pos;
 String name;
 CBildLeinwand bildanzeige;
 File[] dateiweg;

private JFileChooser chooser; 

  int bild_x1,bild_y1;        // die aktuelle Begrenzung 
  int bild_x2,bild_y2;        // des Bildes
  int bildBreite,bildHoehe;


   

 class ActionLauscher implements ActionListener {
   public void actionPerformed(ActionEvent e) {
   String Label;

   Label = e.getActionCommand();

   if (Label.equals("Bild laden")){
     laden();
    
}

   if (Label.equals("beenden"))
     System.exit(0);

if(Label.equals("weiter")){
index++;
  if(index > dateiweg.length-1) { 
         index = 0;
          }
ImageIcon tmp = new ImageIcon(dateiweg[index].getAbsolutePath());
bild = tmp.getImage();
	}
	

if(Label.equals("zurück")){
index--;
  if(index < 0) { 
         index = dateiweg.length-1;
         } 
ImageIcon tmp = new ImageIcon(dateiweg[index].getAbsolutePath());
bild = tmp.getImage();
}
	repaint();
   }
}

 Bildbetrachter (String titel) {
  super(titel);

x_pos = y_pos ;
bild_x1 = bild_x2 = bild_y1 = bild_y2;

name = null;
bild = null;

setLayout(new BorderLayout());

bildanzeige  = new CBildLeinwand();
bildanzeige.setSize(900,600);
add(bildanzeige,BorderLayout.NORTH);
bildanzeige.setBackground(Color.white);
JPanel Button = new JPanel();
JButton weiter = new JButton("weiter");
JButton zurück = new JButton("zurück");

Button.add(zurück);
Button.add(weiter);
add(Button,BorderLayout.SOUTH);
weiter.addActionListener(new ActionLauscher());
zurück.addActionListener(new ActionLauscher());

JScrollPane listenScrollPane = new javax.swing.JScrollPane();
listenScrollPane.setViewportView(bildanzeige);
add(listenScrollPane);   



JMenuBar menuleiste = new JMenuBar();
setJMenuBar(menuleiste);

JMenu menu = new JMenu("Datei"); //menu erstellen

JMenuItem laden = new JMenuItem("Bild laden"); //Menubutton laden
laden.addActionListener(new ActionLauscher());


JMenuItem beenden = new JMenuItem("beenden");
beenden.addActionListener(new ActionLauscher());
menu.add(laden);

menu.add(beenden);
menuleiste.add(menu);

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

}
public void laden(){

  chooser = new JFileChooser();
  chooser.setMultiSelectionEnabled(true);
  if (chooser.showOpenDialog(bildanzeige) == 
                                JFileChooser.APPROVE_OPTION){

                    	
                                	
dateiweg = chooser.getSelectedFiles();
if (dateiweg == null) {
return;
}
 if(dateiweg.length>0)
   name = dateiweg[0].getName();
  
   

}
                 


	

 bildBreite = bild.getWidth(bildanzeige);
 bildHoehe = bild.getHeight(bildanzeige);


bild_x1 = x_pos;
bild_y1 = y_pos;
bild_x2 = bild_x1 + bildBreite;
bild_y2 = bild_y1 + bildHoehe;
bildanzeige.setSize(bildBreite,bildHoehe);
bildanzeige.repaint();
}





public static void main(String[] args){
fenster = new Bildbetrachter("Bildbetrachter");
fenster.setSize(900,600);

fenster.pack();
fenster.setLocation(30,50);
fenster.setVisible(true);
}

 class CBildLeinwand extends JPanel {





 	
    // Panel neu zeichnen
    public void paintComponent(Graphics g) {
      super.paintComponent(g);

      // Falls ein Bild geladen ist, das Bild anzeigen
    if(bild != null) 
        g.drawImage(bild,x_pos,y_pos,this);
       


  
}

    public Dimension getMinimumSize() {
      return fenster.getSize();
    }
    public Dimension getPreferredSize() {
       return bildanzeige.getSize();
    }
    

  
}
}
```

Ich hoffe, dass ich alles was ihr mir geschrieben hab berücksichtigt hab , wie z.B das Variablen klein geschrieben werden.

Vermutlich werde ichjetzt noch ein Dateifilter für den Lade-Dialog mit einbauen dann bin ich fertig

das hab ich nur mit eurer hilfe geschaft 
also nochmal ein großes LOB an euch


----------

