Halo,
habe mir ein kleines Tool gebastelt dass erstmal über einen FileChooser ein Bild laden sollte und es mir dann anzeigen.
Bin da so vorgegangen wie es in dem Buch "Java ist auch eine Insel" beschrieben wurde - fast.
Erstmal hier mein Code:
Klasse1 - da wird nur die GUI erzeugt:
Klasse2 - Hier hab ich mal das Actionhandling reingepackt:
Klasse3 - Die Main:
Aber es wird mir jetzt nix angezeigt, ist ja auch klar, weil der Ausdruck
in der paintComponent Methode nix mit this anfangen kann. (Denk ich mir mal so).
Was muss ich dem denn da angeben? Eine Instanz von der KLasse Gui? Da wüsste ich aber nicht wie ich dran kommen soll.
Oder gibts gar einen besseren/einfacheren/eleganteren Weg?
habe mir ein kleines Tool gebastelt dass erstmal über einen FileChooser ein Bild laden sollte und es mir dann anzeigen.
Bin da so vorgegangen wie es in dem Buch "Java ist auch eine Insel" beschrieben wurde - fast.
Erstmal hier mein Code:
Klasse1 - da wird nur die GUI erzeugt:
Code:
import javax.swing.JFrame;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import java.awt.Dimension;
import javax.swing.JMenuBar;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import javax.swing.JMenu;
public class Gui {
public JFrame jFrame = null; // @jve:decl-index=0:visual-constraint="210,18"
private JMenuBar jJMenuBar1 = null;
private JMenu jMenu = null;
Ereignishandling ereignisse = new Ereignishandling(); // @jve:decl-index=0:
/**
* This method initializes jFrame
*
* @return javax.swing.JFrame
*/
public JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setSize(new Dimension(717, 465));
jFrame.setTitle("Bilddreher v0.x");
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jFrame.setJMenuBar(getJJMenuBar1());
jFrame.setVisible(true);
}
return jFrame;
}
/**
* This method initializes jJMenuBar1
*
* @return javax.swing.JMenuBar
*/
private JMenuBar getJJMenuBar1() {
if (jJMenuBar1 == null) {
jJMenuBar1 = new JMenuBar();
jJMenuBar1.setPreferredSize(new Dimension(0, 30));
jJMenuBar1.add(getJMenu());
}
return jJMenuBar1;
}
/**
* This method initializes jMenu
*
* @return javax.swing.JMenu
*/
private JMenu getJMenu() {
if (jMenu == null) {
jMenu = new JMenu();
jMenu.setText("Datei");
JMenuItem dateiOeffnen = new JMenuItem("Datei öffnen");
dateiOeffnen.setAccelerator(KeyStroke.getKeyStroke('O', InputEvent.CTRL_MASK));
ereignisse.OeffnenDialog(dateiOeffnen);
jMenu.add(dateiOeffnen);
jMenu.addSeparator();
JMenuItem ordnerOeffnen = new JMenuItem("Ordner öffnen");
ordnerOeffnen.setAccelerator(KeyStroke.getKeyStroke('F', InputEvent.CTRL_MASK));
jMenu.add(ordnerOeffnen);
jMenu.addSeparator();
JMenuItem speichernUnter = new JMenuItem("Speichern unter...");
speichernUnter.setAccelerator(KeyStroke.getKeyStroke('S', InputEvent.CTRL_MASK));
jMenu.add(speichernUnter);
jMenu.addSeparator();
JMenuItem exit = new JMenuItem("Beenden");
ereignisse.ShortcutsErstellen(exit, 'X');
ereignisse.Exithandling(exit);
jMenu.add(exit);
}
return jMenu;
}
}
Klasse2 - Hier hab ich mal das Actionhandling reingepackt:
Code:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.io.File;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;
import javax.swing.filechooser.FileFilter;
public class Ereignishandling extends JComponent{
JFileChooser fileChooser = new JFileChooser();
Image image ;
public void setImage( File file )
{
image = Toolkit.getDefaultToolkit().getImage( file.getAbsolutePath() );
if ( image != null )
repaint();
}
@Override
protected void paintComponent( Graphics g )
{
if ( image != null )
g.drawImage( image, 0, 0, this );
}
public void ShortcutsErstellen(JMenuItem MenueEintrag, char c) {
MenueEintrag.setAccelerator(KeyStroke.getKeyStroke(c,
InputEvent.CTRL_MASK));
}
public void Exithandling(JMenuItem exit) {
exit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
System.exit(0);
}
});
}
public void OeffnenDialog(JMenuItem dateiOeffnen) {
dateiOeffnen.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg1) {
fileChooser.setSize(100, 100);
fileChooser.setDialogTitle("Bilddatei öffnen");
fileChooser.setFileFilter( new FileFilter()
{
@Override
public boolean accept( File f )
{
return f.isDirectory() || f.getName().toLowerCase().endsWith( ".jpg" )
|| f.getName().toLowerCase().endsWith( ".gif" );
}
@Override
public String getDescription()
{
return "*.jpg;*.gif";
}
} );
switch (fileChooser.showOpenDialog(null)) {
case JFileChooser.APPROVE_OPTION:
File bild = fileChooser.getSelectedFile();
setImage(bild);
// InputStream in = new FileInputStream(fileChooser.getSelectedFile());
// BufferedReader reader = new BufferedReader(new InputStreamReader(in));
break;
case JFileChooser.CANCEL_OPTION:
break;
}
}
});
}
}
Klasse3 - Die Main:
Code:
public class Main extends Gui {
public static void main(String[] args) {
Gui gui = new Gui();
gui.getJFrame();
}
}
Aber es wird mir jetzt nix angezeigt, ist ja auch klar, weil der Ausdruck
Code:
g.drawImage( image, 0, 0, this );
Was muss ich dem denn da angeben? Eine Instanz von der KLasse Gui? Da wüsste ich aber nicht wie ich dran kommen soll.
Oder gibts gar einen besseren/einfacheren/eleganteren Weg?