Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
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
Code:
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 ! ! !
}
}
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:
Code:
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.
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:
Code:
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));
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.
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