Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Azasel

unregistriert

1

29.02.2016, 20:37

Bild kann nicht geladen werden

Hallo,

Ich bin seit etwas längerer Zeit dabei, ein Bild in ein Panel zu portieren.
Im Internet fand ich mit den Beispielen von anderen nichts mit anzufangen.
Aus meinem Java Buch habe ich diesen Quelllcode entdeckt.
Aber es scheint beim einfügen kein Bild zu erzeugen, die Fläche bleibt einfach weiß.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
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(){
    JFileChooser dlg = new JFileChooser(".");
    int dialogRueckgabe = dlg.showOpenDialog(this);

    if (dialogRueckgabe == JFileChooser.APPROVE_OPTION)
    {
       // Benutzer hat den Dialog mit OK verlassen
       // -> ausgewählten Dateinamen übernehmen
       m_dateiname = dlg.getSelectedFile().getName();

       // 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();
    }
  }
}


Hat da jemand eine Idee ?
Danke schonmal

2

11.03.2016, 19:08

Wie groß ist dein Pane denn?
Wenn es nur 1x1 Pixel groß ist, wird es auch nicht angezeigt.
Du solltest dem Pane vllt. eine feste Größe geben.
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung