Hi Leute,
ich hab die Klassen TrainIRW und ImageMenu.
Mein Ziel ist es, über den Menubutton "load Image" das Bild in mein JPanel zu bekommen.
Mit dem "save Image" speicher ich das Bild z.B auf meinem Desktop.
Nun habe ich das Problem, dass er mir das Bild auf meinem JPanel NICHT anzeigt, aber speichern geht.
Wenn ich aber das Objekt TrainIRW übergebe und nicht das Image von TrainIRW, dann funktionierts.
Nun würde ich gerne wissen, warum das so ist.
Ich hoffe, da blickt jemand durch meinen Code, auch wenn die Variablennamen nicht gut gewählt sind und die Struktur nicht allzu sauber ist.
ich hab die Klassen TrainIRW und ImageMenu.
Mein Ziel ist es, über den Menubutton "load Image" das Bild in mein JPanel zu bekommen.
Mit dem "save Image" speicher ich das Bild z.B auf meinem Desktop.
Nun habe ich das Problem, dass er mir das Bild auf meinem JPanel NICHT anzeigt, aber speichern geht.
Wenn ich aber das Objekt TrainIRW übergebe und nicht das Image von TrainIRW, dann funktionierts.
Nun würde ich gerne wissen, warum das so ist.
Java:
public class TrainIRW extends JPanel{
private final static long serialVersionUID = 1L;
protected Image img;
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(img, 0, 0, null);
}
public static void main(String[] args) {
TrainIRW tIRW = new TrainIRW();
JFrame frame = new JFrame("Tain IRW");
frame.setJMenuBar(new ImageMenu(tIRW));
Container con = frame.getContentPane();
con.add(tIRW);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(800, 600);
frame.setVisible(true);
}
}
class ImageMenu extends JMenuBar{
private final static long serialVersionUID = 1L;
protected BufferedImage bi;
protected File file;
public ImageMenu(TrainIRW tIRW){
JMenu menu = new JMenu("File");
JMenuItem loadItem = new JMenuItem("load Image");
JMenuItem saveItem = new JMenuItem("save Image");
loadItem.addActionListener(e->{
loadImg(tIRW.img); //hier nur tIRW, dann funktionierts
tIRW.repaint();
});
saveItem.addActionListener(e->{
saveImg();
});
menu.add(loadItem);
menu.add(saveItem);
add(menu);
}
private void loadImg(Image img){ //hier TrainIRW tirw übergeben
try{
file = new File("...png"); //Musterpath
bi = ImageIO.read(file);
System.out.println("Image successfully loaded from " + file.getPath());
}catch(IOException e){
e.printStackTrace();
}
img = bi; //hier tIRW.img, dann funktionierts
}
private void saveImg(){
file = new File("c:..."); //Musterpath
try{
ImageIO.write(bi, "png", file);
System.out.println("Image successfully saved in " + file.getPath());
}catch(IOException e){
e.printStackTrace();
}
}
}
Ich hoffe, da blickt jemand durch meinen Code, auch wenn die Variablennamen nicht gut gewählt sind und die Struktur nicht allzu sauber ist.
Zuletzt bearbeitet von einem Moderator: