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