Ich habe mich erneut daran gemacht, mich mit Computerprogrammierung zu beschäftigen und mache als Übung gerade ein einfachstes Bildleseprogramm. Dieses soll durch einen FileChooser Bilddateien einlesen und diese auf einem JPanel darstellen.
Dazu erschaffe ich in der Mainmethode eine Gui:
... ich wollte nun zunächst durch die Methode setPicPane() eine leere JPane erzeugen. An den Button des FileChooser, mit dem ich das Bild lade, habe ich einen Actionlistener gehängt, wenn dieser Button betätigt wird, habe ich die Methode setPicPane(pic) mit dem BufferedImage namens pic überladen.
Nun meine Frage: Leider funktioniert das so nicht. Liegt das daran, dass sie Idee mit der überladenen setPicPane()-Methode nicht geht, oder lade ich das Bild falsch in das BufferedImage-Objekt?
Hier noch die Loader-Klasse, wo das Bild eben geladen werden soll:
Dazu erschaffe ich in der Mainmethode eine Gui:
Java:
package core;
import gui.Gui;
public class Main {
public static void main(String[] args) {
Gui gui = Gui.getInstance();
gui.createAndShowGUI();
}
}
... ich wollte nun zunächst durch die Methode setPicPane() eine leere JPane erzeugen. An den Button des FileChooser, mit dem ich das Bild lade, habe ich einen Actionlistener gehängt, wenn dieser Button betätigt wird, habe ich die Methode setPicPane(pic) mit dem BufferedImage namens pic überladen.
Java:
package gui;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import javax.swing.*;
import loader.Loader;
public class Gui implements ActionListener{
private myJFrame frame;
private JButton choose;
private JButton save;
private JButton cancel;
private JLabel picPane;
private static final Gui gui = new Gui();
private Gui() {
System.out.println("Gui built...");
}
public static Gui getInstance() {
return gui;
}
public void createAndShowGUI() {
frame = new myJFrame();
setPicPane();
JPanel buttonPane = new JPanel();
buttonPane.setLayout(new BoxLayout(buttonPane, BoxLayout.LINE_AXIS));
buttonPane.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
choose = new JButton("choose pic");
choose.addActionListener(this);
buttonPane.add(choose);
buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
save = new JButton("save");
save.addActionListener(this);
buttonPane.add(save);
buttonPane.add(Box.createRigidArea(new Dimension(10, 0)));
cancel = new JButton("cancel");
cancel.addActionListener(this);
buttonPane.add(cancel);
frame.addToFrame(buttonPane,BorderLayout.PAGE_END);
frame.show();
}
@Override
public void actionPerformed(ActionEvent ae) {
if(ae.getSource() == this.cancel){
System.exit(0);
}
else if(ae.getSource() == this.choose){
Loader loader = Loader.getInstance();
BufferedImage pic = loader.getFileFromLoader();
setPicPane(pic);
}
else if(ae.getSource() == this.save){
// ...
}
}
private void setPicPane() {
picPane = new JLabel();
picPane.setLayout(new BoxLayout(picPane, BoxLayout.PAGE_AXIS));
picPane.add(Box.createRigidArea(new Dimension(5,5)));
picPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
frame.addToFrame(picPane,BorderLayout.CENTER);
}
private void setPicPane(BufferedImage pic) {
picPane = new JLabel();
picPane.setLayout(new BoxLayout(picPane, BoxLayout.PAGE_AXIS));
picPane.add(Box.createRigidArea(new Dimension(5,5)));
picPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
picPane.paintComponents(pic.getGraphics());
frame.addToFrame(picPane,BorderLayout.CENTER);
}
}
Nun meine Frage: Leider funktioniert das so nicht. Liegt das daran, dass sie Idee mit der überladenen setPicPane()-Methode nicht geht, oder lade ich das Bild falsch in das BufferedImage-Objekt?
Hier noch die Loader-Klasse, wo das Bild eben geladen werden soll:
Code:
package loader;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Loader {
private static final Loader loader = new Loader();
private Loader() {
System.out.println("Loader built...");
}
public static Loader getInstance() {
return loader;
}
public static BufferedImage getFileFromLoader(){
JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter = new FileNameExtensionFilter(
"jpg", "jpeg", "gif", "png", "JPG", "JPEG", "GIF", "PNG");
chooser.setFileFilter(filter);
int returnVal = chooser.showOpenDialog(null);
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
}
BufferedImage buffImg = null;
if (chooser.showOpenDialog(null) == 0) {
try {
buffImg = ImageIO.read(chooser.getSelectedFile());
} catch (IOException e) {
System.out.println("Image could not be loaded.");
}
}
return buffImg;
}
}
Zuletzt bearbeitet: