wie kann man ein *.jpg in ein JPanel mit BorderLayout einfügen?
Gruss yonah
> wie kann man ein *.jpg in ein JPanel mit BorderLayout einfügen?
überschreib dir doch einfach ne eigene JComponent, die an geeigneter
Stelle Graphics.drawImage(...) aufruft und schmeiß dass dann deinem
JPanel zu. Größe und so kannst du ja vom Image nehmen...
Gruß,
Flo
import Mainfrm.*;
import MainControl.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.*;
/* FrameDemo.java requires no other files. */
public class Beschaedigungen extends JFrame {
public Beschaedigungen(){
JFrame dlg = new JFrame();
dlg.setTitle("Beschädigungsaufnahme");
dlg.add(createSchaden());
dlg.pack();
dlg.setVisible(true);
}
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel() {
try {
image = ImageIO.read(new File("/home/yonah/ich.jpg"));
} catch (IOException ex) {
System.out.print("Error");
}
}
@Override
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, 800, 900, null); // see javadoc
for more info on the parameters
}
}
private JPanel createSchaden() {
String[] location =
{ "--","rechts","links","vorne","hinten"};
String[] sliste =
{ "Verkleidung","Stossfänger","Kotflügel","Heckklappe" };
String[] dliste = { "Innenverkleidung","Dachhimmel und
Sonnenblenden" };
String[] rliste = { "erneuern","polieren" };
JComboBox hgs = new JComboBox(sliste);
hgs.setSelectedIndex(0);
hgs.addActionListener(hgs);
JComboBox orthg = new JComboBox(location);
JPanel schadenpanel = new JPanel();
GridLayout layout = new GridLayout(3,3);
schadenpanel.setLayout(layout);
JComboBox ds = new JComboBox(dliste);
ds.setSelectedIndex(0);
ds.addActionListener(ds);
JComboBox ortd = new JComboBox(location);
JComboBox rep = new JComboBox(rliste);
rep.setSelectedIndex(0);
rep.addActionListener(rep);
schadenpanel.add(new JLabel("Hauptgruppe"));
schadenpanel.add(hgs);
schadenpanel.add(orthg);
schadenpanel.add(new JLabel("Detailschaden"));
schadenpanel.add(ds);
schadenpanel.add(ortd);
schadenpanel.add(new JLabel("Nötige Reparatur"));
schadenpanel.add(rep);
JPanel schaden = new JPanel(new BorderLayout());
//Foto
// Scan, Add, Reset, Ok Menue
JPanel bildadd = new JPanel(new BorderLayout());
//Label Foto
JLabel foto = new JLabel("Für den Schaden einzufügendes
Foto:");
// Scann button
JButton scan = new JButton("Scan");
// Add file Button
JButton addfile = new JButton("Add File");
//Reset Button
JButton reset = new JButton("Reset");
//OK Button
JButton ok = new JButton("OK");
JPanel fotomenue = new JPanel(new GridLayout(1,4));
fotomenue.add(scan);
fotomenue.add(addfile);
fotomenue.add(reset);
fotomenue.add(ok);
//Panel zusammenbauen
bildadd.add(foto,BorderLayout.NORTH);
bildadd.add(new ImagePanel(),BorderLayout.CENTER);
bildadd.add(fotomenue,BorderLayout.SOUTH);
schaden.add(schadenpanel,BorderLayout.NORTH);
schaden.add(bildadd,BorderLayout.CENTER);
schaden.add(fotomenue,BorderLayout.SOUTH);
return schaden;
}
}
Kann mir jemand den Fehler sagen?
gruss yonah
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel() {
try {
image = ImageIO.read(new File("/home/yonah/ich.jpg"));
} catch (IOException ex) {
System.out.print("Error");
}
}
@Override
public void paintComponent(Graphics g) {
g.drawImage(image, 0, 0, 800, 900, null);
}
}
Ich habe das jetzt so gemacht, leider wenn ich mit add(new ImagePanel
(),BorderLayout.Center); das Image einfüge, wird es zwar in der Grösse
die angegeben ist dargestellt, aber das Frame zeigt es nicht vollständig
an (habe dort pack())
Woran kann das liegen?
gruss yonah
Die einfachste Möglichkeit ist ein JLabel mit einem ImageIcon darin.
Willst du in dem JPanel nur das Bild, oder noch weitere Komponenten?
Was hat das BorderLayout damit zu tun?
Paul
>Habs gelöst :-)
Schön, dass alle an deiner Freude teilhaben dürfen :-)
----------------------------------------------
Bei Fehlern im Code ist das Chaos programmiert.
(Aus einem Text über Software Engineering)