Ich versuche jetzt schon eine ganze Weile zu einem JFrame ein JPanel mit einem Bild hinzuzufügen, was auch einmal kurzfristig funktioniert hat, aber nicht so wie ich es mir vorstelle, weshalb ich es wieder geändert habe. Aber nun wird das Bild nicht mehr angezeigt und ich kann die Ursache dafür einfach nicht finden.
Im folgenden erst einmal der Code. Ich verwende zum entwickeln NetBeans der den Code für die Gui selbst erzeugt, deshalb nicht über den etwas seltsamen Stil wundern.
Aufgerufen wird der Frame über:
Mittels showPicture() versuche ich das Bild zum Frame hinzuzufügen, was aber wie gesagt nicht klappt. Dann habe ich zur Überprüfung einfach mal System.out.println(component[0].getName()); eingebaut, was eigentlich den Namen der Komponenten "imageComp" zurückliefern sollte, aber zu meiner Verwunderung kam als Ausgabe schlicht "null". Die Komponente scheint also gar nicht hinzugefügt worden zu sein.
Ich hab in letzter Zeit viel ausprobiert und zig Beispiele gelesen, wie man Bilder mit Java anzeigen kann, aber eine Erklärung warum es bei mir nicht geht kann ich einfach nicht finden.
Schon mal vielen Dank für jede Hilfe.
Im folgenden erst einmal der Code. Ich verwende zum entwickeln NetBeans der den Code für die Gui selbst erzeugt, deshalb nicht über den etwas seltsamen Stil wundern.
Code:
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.image.BufferedImage;
import java.awt.Container;
import javax.imageio.*;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Gui_1 extends javax.swing.JFrame {
private String selectedFile;
private Image background;
private Graphics g;
private BufferedImage image;
private ImageComponent_1 imageComponent;
private Component[] component;
public Gui_1() {
initComponents();
}
// <editor-fold defaultstate="collapsed" desc=" Erzeugter Quelltext ">
private void initComponents() {
jFileChooser1 = new javax.swing.JFileChooser();
jButton1 = new javax.swing.JButton();
mainMenu = new javax.swing.JMenuBar();
fileMenu = new javax.swing.JMenu();
openMenuItem = new javax.swing.JMenuItem();
getContentPane().setLayout(null);
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
fileMenu.setText("File");
openMenuItem.setText("Open");
openMenuItem.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
openMenuItemActionPerformed(evt);
}
});
fileMenu.add(openMenuItem);
mainMenu.add(fileMenu);
setJMenuBar(mainMenu);
pack();
}// </editor-fold>
private void openMenuItemActionPerformed(java.awt.event.ActionEvent evt) {
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG & GIF Images", "jpg", "gif");
jFileChooser1.setFileFilter(filter);
int returnVal = jFileChooser1.showOpenDialog(Gui_1.this);
if(returnVal == jFileChooser1.APPROVE_OPTION) {
selectedFile = jFileChooser1.getSelectedFile().getPath();
}
File imageFile = new File(selectedFile);
try {
image = ImageIO.read(new File(selectedFile));
imageComponent = new ImageComponent_1(image);
} catch(IOException e) {
System.out.println(e.toString());
}
showPicture(imageComponent);
}
private void showPicture(ImageComponent_1 imageComp) {
getContentPane().add(imageComp);
component = getContentPane().getComponents();
System.out.println(component[0].getName());
pack();
validate();
}
// Variablendeklaration - nicht modifizieren
private javax.swing.JMenu fileMenu;
private javax.swing.JButton jButton1;
private javax.swing.JFileChooser jFileChooser1;
private javax.swing.JMenuBar mainMenu;
private javax.swing.JMenuItem openMenuItem;
// Ende der Variablendeklaration
}
Code:
import java.awt.*;
import javax.swing.JPanel;
public class ImageComponent_1 extends JPanel {
private Image image;
public ImageComponent_1(Image image) {
this.image = image;
}
@Override
public Dimension getPreferredSize() {
return new Dimension(image.getWidth(null), image.getHeight(null));
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image,0,0,this);
}
}
Aufgerufen wird der Frame über:
Code:
public class Main {
private static Gui_1 g = new Gui_1();
public Main() {
}
public static void main(String[] args) {
g.setVisible(true);
g.setSize(640,480);
g.setLocation(20,20);
}
}
Mittels showPicture() versuche ich das Bild zum Frame hinzuzufügen, was aber wie gesagt nicht klappt. Dann habe ich zur Überprüfung einfach mal System.out.println(component[0].getName()); eingebaut, was eigentlich den Namen der Komponenten "imageComp" zurückliefern sollte, aber zu meiner Verwunderung kam als Ausgabe schlicht "null". Die Komponente scheint also gar nicht hinzugefügt worden zu sein.
Ich hab in letzter Zeit viel ausprobiert und zig Beispiele gelesen, wie man Bilder mit Java anzeigen kann, aber eine Erklärung warum es bei mir nicht geht kann ich einfach nicht finden.
Schon mal vielen Dank für jede Hilfe.