JFrame Bild-Anzeige bei frame-Größe
Habe ich diese JFrame mit einem Kinder, die von JPanel, darin zeigt es das Bild, das erklärt, in dieser Art und Weise.
BufferedImage image = ImageIO.read(filename);
Zeigt das Programm das Bild richtig. Aber die einzige Sache ist, die benötigt wird, um die Größe des Rahmens um das Bild anzuzeigen.
Ist es ein möglicher Weg, um das Bild anzuzeigen, sobald der Rahmen erscheint?
- Kann sein, dass das passiert, weil Sie mit dem hinzufügen Bild danach zeigt den Rahmen. Als Lösung sollten Sie zunächst Bild hinzufügen, dann stellen Sie frame sichtbar oder Sie können auch rufen repaint() nach dem hinzufügen von Bild.
- Horad, wenn das helfen würde, wenn Sie mehr Beispiel-code.
- Können Sie den Kommentar Antwort löschen den thread. Danke. Ich werde die Antwort akzeptieren.
- Vielleicht könnten Sie versuchen, die Implementierung der paint-Methode wieder in Ihre eigene Klasse erweitert JPanel wie folgt aus: pastebin.com/3ZwVvr2v und machen Sie sicher, dass super.paintComponent(g) wird aufgerufen, bei der Erstellung Ihrer JPanel so, dass das JFrame gezeichnet wird mit der Bild.
- Konnte Sie auch nach dem code, wo Sie die Zeichnung für ein Bild?
- kann es schien seltsam. Aber ich habe versucht, eine Methode der Rückkehr BufferedImage aus der gleichen code-Zeile oben. Und auf der paint(Graphics g) - Methode, die ich verwendet diese Methode und es funktionierte.
- Horad, sollten Sie nie explizit aufgerufen
paint(...)
oder überschreiben. - Horad paint(...) delegiert wird für den Awt-und BasicXxxUI, für die Malerei in der Schaukel ist es paintComponent(...) als sugested @Kevin Gurney und @little bunny foo foo zu
- Horad, bitte siehe mein edit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie überschreiben
paintComponent(Graphics g)
und zeichnen das Bild darin. In diesem Fall, Sie sollten dies tun, für dieJPanel
Komponente (denke ich?! Wenn nicht, tun Sie dies für dieJComponent
(en) Sie sich beziehen). Auch, da Swing nicht thread-sicher ist, sicherzustellen, dass diese änderungen durchgeführt werden, in derEDT
.BEISPIEL
AUSGABE
Es ist wichtig zu beachten, dass dieses Beispiel ignoriert rendering-hints, also, wenn Sie maximieren die
JFrame
die Qualität der Bilder sehr schlecht. 🙂BEARBEITEN
Bei der Beantwortung dieser Frage, bin ich davon ausgegangen, Sie hatte ein grundlegendes Verständnis von Swing. Ich nehme an, ich nahm zu viel. Es ist wichtig zu erwähnen, dass alle Komponenten, die Hinzugefügt werden soll, um die top-level-container, bevor es wurde realisiert (d.h. sichtbar). Dadurch wird sichergestellt, dass alles gerendert wird, ohne die Größe Ihres Rahmens. Wie andere haben vorgeschlagen, Sie könnten einfach ein
JLabel
zu Rendern das Bild, und dann Hinzugefügt, um IhreJPanel
. Stattdessen habe ich gefördert, custom painting, was vollkommen akzeptabel ist, ist für mich sauberer.paint(...)
Griffe Malerei den Inhalt, die Grenzen und die Kinder jede Swing-Komponente, in der Erwägung, dasspaintComponent(...)
ist für die Wiedergabe verwendet wird die Swing-Komponente, und wird überschrieben, wenn benutzerdefinierte rendering gewünscht ist.paintComponent(...)
ist "das Rad neu erfinden"? Es ist definitiv niedrigeren Ebene als die Verwendung einesJLabel
, aber es ist sicherlich nicht das Rad neu erfinden. Zu mir, durch die Verwendung einesJLabel
, was Sie tun, ist die übertragung der Bild-rendering-Engine auf eine andere Komponente.für dispaly Bild oder ImageIcon besser Aussehen für JLabel (grundlegende Dinge)