Erste Schritte Bildbetrachter

wolfgangti08

Mitglied
Hallo,
ich bin Java-Anfänger und arbeite das Buch "Jetzt lerne ich Java 7 " durch. Ich vermute, dass es Leute geben muss, die auch so angefangen haben. Ich bin auf Seite 227 beim "Bildbetrachter" angekommen. Ich habe den Inhalt von der Datei Bildbetrachter.java von der Buch-CD kopiert und in den Editor von meiner Festplatte eingefügt, unter dem gleichen Namen gespeichert. Tippfehler sind also ausgeschlossen. In dem Konsolenfenster habe ich in dem Verzeichnis C:\Java\Kap11 eingetippt : javac Bildbetrachter.java. - keine Fehlermeldung , dann java Bildbetrachter. Ein großes Bildbetrachterfenster geht auf. Nach klicken auf "Datei" navigiere ich zu dem Bild "stabkirche.jpg" . Nach Anklicken - öffnen - es bleibt bei der weißen Fläche. Es ist also kein Bild zu sehen. Wer kann mir schreiben, was ich da falsch mache?
Das mit der JRE-Prüfung von Seite 371 habe ich auch gemacht. Es ist alles verfügbar. Oder?
http://www.java-forum.org/attachment.php?attachmentid=4394&stc=1&d=1332348636
 

Anhänge

  • versionjava.JPG
    versionjava.JPG
    32,1 KB · Aufrufe: 58

Michael...

Top Contributor
Schwer zu sagen. Vielleicht enthält der Code einen (Druck)Fehler? Vielleicht liegt es am Bild? Hast du es mal mit einem anderen kleineren Bild versucht?
Gibt es Fehlermeldungen? (Wie startest Du das Programm? Aus der IDE, von der Konsole aus...)

Wenn sich die Applikation starten lässt und Du darin ein Bild auswählen kannst, liegt es zumindest nicht an Dir ;-)

Aber ohne den Code oder evtl. Fehlermeldungen zu kennen, wird es schwer da zu helfen.
 

wolfgangti08

Mitglied
Ja, ich habe es mit anderen Bildern versucht. Es geht nichts. Ich kenne nur die Startmethode Konsole. Gibt es noch andere Startmöglichkeiten?
Java:
// Bildbetrachter
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class Bildbetrachter extends JFrame {
  static Bildbetrachter m_fenster;
  String m_dateiname;             // Name der Datei
  Image   m_aktBild;              // Referenz auf das aktuelle Bild
  BildLeinwand m_bildanzeige;    // JPanel zum Anzeigen des Bildes
  int m_Xpos,m_Ypos;              // neue Position, an der die 
                                  // linke obere Ecke des Bildes 
                                  // angezeigt wird
  int m_bild_x1,m_bild_y1;        // die aktuelle Begrenzung 
  int m_bild_x2,m_bild_y2;        // des Bildes
  int m_bildHoehe,m_bildBreite;   // Höhe und Breite in Pixeln

  // Ereignisbehandlung
  class MeinActionLauscher implements ActionListener {
    public void actionPerformed(ActionEvent e) {
      String Label;

      Label = e.getActionCommand();

      if(Label.equals("Programm beenden"))
         System.exit(0);

      if(Label.equals("Bild laden"))
         bildLaden();         
      }
    }

  // Im Konstruktor werden ein Panel (als Zeichenfläche)
  // und eine Menüleiste angelegt
  Bildbetrachter(String titel) {
    super(titel);

    m_Xpos = m_Ypos = 0;       // Startposition : links oben
    m_bild_x1 = m_bild_x2 = m_bild_y1 = m_bild_y2 = 0;

    // Zu Beginn ist kein Bild geladen
    m_dateiname = null;
    m_aktBild = null;

    // Einen Layout-Manager anlegen
    setLayout(new FlowLayout());

    // Eine Leinwand anlegen (von JPanel abgeleitet)
    m_bildanzeige  = new BildLeinwand();
    add(m_bildanzeige);
  
    // Das Fenster mit einer Menüleiste versehen
    JMenuBar menueleiste = new JMenuBar();
    setJMenuBar(menueleiste);

    // Die PopupMenüs der Menüleiste erstellen
    JMenu menu1 = new JMenu("Datei");
    JMenuItem item1  = new JMenuItem("Bild laden");
    item1.addActionListener(new MeinActionLauscher());

    JMenuItem item2 = new JMenuItem("Programm beenden");
    item2.addActionListener(new MeinActionLauscher());
    menu1.add(item1);
    menu1.add(item2);
    menueleiste.add(menu1);

    setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  }

  // Eine Bilddatei laden
  public void bildLaden(){
    FileDialog d = new FileDialog(this,"Bilddatei laden...",
                                  FileDialog.LOAD);
    d.setVisible(true);
    m_dateiname = d.getFile();


    // Falls der Benutzer keine Datei ausgewählt hat, wird null
    // zurückgegeben
    // Dann nichts weiter tun
    if(m_dateiname == null)
       return;

    // Bild laden 
    ImageIcon tmp = new ImageIcon(m_dateiname);
    m_aktBild = tmp.getImage(); 

    // Die Begrenzungskoordinaten des Bildes ermitteln
    m_bildBreite = m_aktBild.getWidth(m_bildanzeige);
    m_bildHoehe = m_aktBild.getHeight(m_bildanzeige);

    m_bild_x1 = m_Xpos;
    m_bild_y1 = m_Ypos;
    m_bild_x2 = m_bild_x1 + m_bildBreite;
    m_bild_y2 = m_bild_y1 + m_bildHoehe;

    m_bildanzeige.repaint();
  }

  public static void main(String[] args) {
    m_fenster = new Bildbetrachter("Bildbetrachter");
    m_fenster.setSize(800,700);
    m_fenster.pack();
    m_fenster.setVisible(true);
  }


  // Diese Klasse dient zum Anzeigen und Manipulieren des Bildes
  class BildLeinwand extends JPanel {
    // Panel neu zeichnen
    public void paintComponent(Graphics g) {
      super.paintComponent(g);

      // Falls ein Bild geladen ist, das Bild anzeigen
      if(m_aktBild != null)
        g.drawImage(m_aktBild,m_Xpos,m_Ypos,this);
    }

    public Dimension getMinimumSize() {
      return m_fenster.getSize();
    }
    public Dimension getPreferredSize() {
      return getMinimumSize();
    }
  }
}

Das ist der kopierte Quellcode von der Buch-CD
 

Final_Striker

Top Contributor
Java:
  public void bildLaden(){
    FileDialog d = new FileDialog(this,"Bilddatei laden...",
                                  FileDialog.LOAD);
    d.setVisible(true);
    m_dateiname = d.getDirectory() + "\\" + d.getFile(); // <--
    ....

Die Methode
Code:
getFile()
liefert nur den Namen der Datei aber ohne den Pfad. Dadurch wird das Bild auch nicht gefunden. Es muss noch das Verzeichnis davor hinzugefügt werden, dann wird jedes Bild, egal wo es liegt, gefunden.
 
H

hüteüberhüte

Gast
Hier nochmal in aller Kürze:
Java:
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Toolkit;
import java.io.File;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.WindowConstants;
import javax.swing.filechooser.FileFilter;

public class JavaForum {

    public static void main(String[] args) {

        JFileChooser jfc = new JFileChooser();
        jfc.setFileFilter(new FileFilter() {

            @Override
            public boolean accept(File f) {
                return f.isDirectory() || f.getName().toLowerCase().endsWith(".jpg");
            }

            @Override
            public String getDescription() {
                return ".jpg";
            }
        });
        jfc.showOpenDialog(null);
        if (jfc.getSelectedFile() == null) {
            return;
        }
        final Image i = Toolkit.getDefaultToolkit().getImage(jfc.getSelectedFile().getAbsolutePath());
        JFrame jf = new JFrame(jfc.getSelectedFile().getName());
        jf.add(new JComponent() {

            @Override
            protected void paintComponent(Graphics g) {
                g.drawImage(i, 0, 0, this);
            }
        });
        jf.setSize(100, 100);
        jf.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        jf.setVisible(true);

    }
}
...auf das getAbsolutePath() kommt es an.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Bildbetrachter erweitern Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben