# Borderlayout und Bild in Applet einfügen



## hmichl (16. Nov 2007)

Hallo,

ich möchte ein Applet durch ein BorderLayout strukturieren und in der Mitte des Fensters ein Bild plazieren. Leider bekomme ich das Bild nicht angezeigt. Grund: void addLayoutComponent(String name, Component comp).

Kann mir jemand weiterhelfen, wie man das macht ? Vielen Dank im Voraus.

Herzliche Grüße
michl


```
import java.applet.*;
import java.awt.*; 
public class PictureViewer1 extends Applet {

  String strn, strs, stre, strw, strc;
  TextArea textn, texts, texte, textw, textc;
  Font font;
  Image img;

  BorderLayout bl;

  public void init() {
    img = getImage (getCodeBase (), "bild2.jpg");
    strn = new String("North");
    strs = new String("South");
    stre = new String("East");
    strw = new String("West");
    strc = new String("Center");

    font = new Font("HELVETICA", Font.BOLD, 14);
    textn = new TextArea(strn);
    textn.setFont(font);
    texts = new TextArea(strs);
    texts.setFont(font);
    texte = new TextArea(stre);
    texte.setFont(font);
    textw = new TextArea(strw);
    textw.setFont(font);
    textc = new TextArea(strc);
    textc.setFont(font);

    bl = new BorderLayout();
    setLayout(bl);
    add("North", textn);
    add("South", texts);
    add("West", textw);
    add("East", texte);
    add("Center", img);   // <----- Das geht nicht ! ! !
  }
}
```


----------



## wayne (16. Nov 2007)

klar, du benötigst eine Component, welche dir das bild darstellt. das würde beispielsweise ein JLabel tun. bezüglich der größe des bildes würde ich sicherheitshalber dieses aber in ein JScrollPane stecken. dann würde die zeile, welche du hier markiert hast folgendermaßen aussehen:

```
add("Center", new JScrollPane(new JLabel(new ImageIcon(img))));
```
selbstverständlich gibt es noch andere wege um ein bild in einer Component darzustellen. beispielsweise ist das überschreiben der paint(...)- oder paintComponent(...)-methode eine sehr häufig verwendete und äusserst performate möglichkeit dafür. in dem als parameter erhaltenen Graphic-objekt, welches sich, nebenbei erwähnt, nach Graphics2D casten lässt, gibt es einige methoden um ein bild zu zeichnen, ggf. auch skaliert oder anderweitig transformiert. solltest du letzteren weg gehen wollen, empfehle ich dir von einem JPanel zu erben, da dieses am wenigsten unnötigen ballast mitbringt.

viel erfolg

wayne


----------



## wayne (16. Nov 2007)

sorry, gleich nach dem absenden ist mir aufgefallen, daß du ja alles in AWT machst und von dem her diese swing-lösung nicht akzeptieren wirst. also mach es auf die 2. beschriebene art. das sähe dann so aus:

```
Panel aPanel = new Panel(){
    public void paint(Graphics g){
        g.drawImage(img,0,0,null);
    }

    public Dimension getPreferredSize(){
        return new Dimension(img.getWidth(null),img.getHeight(null));
    }
}
add("Center",new ScrollPane(aPanel));
```
viel erfolg

wayne


----------



## Quaxli (16. Nov 2007)

Man könnte auch überlegen, auf das Panel zu verzichten und direkt in das Applet zu zeichnen, indem man die paint-Methode des Applets überschreibt.
Solche Geschichten mit der ScrollPane wie von Wayne beschrieben gehen dann aber nicht mehr.


----------



## hmichl (18. Nov 2007)

Hallo Wayne,

herzlichen Dank für die Hilfestellung. Leider bekomme ich immer noch folgende Fehlermeldung:

D:\Eigene Dateien\JavaGrundl\PR1MMI5>javac PictureViewer1.java
PictureViewer1.java:51: cannot find symbol
symbol  : constructor ScrollPane(java.awt.Panel)
location: class java.awt.ScrollPane
    add("Center", new ScrollPane(aPanel));
                  ^
1 error

D:\Eigene Dateien\JavaGrundl\PR1MMI5>

Irgendwas scheint da noch nicht zu passen ! ?

Viele Grüße ... hmichl


----------

