Ich habe eine GUI mit Swing von Java erstellt. Ich muss jetzt ein Bild von sample.jpeg als Hintergrund für den Rahmen festlegen, auf dem ich meine Komponenten platziert habe. Wie geht das?Wie setze ich ein Bild als Hintergrund für Frame in Swing GUI von Java?
Antwort
Es gibt kein Konzept für ein "Hintergrundbild" in einem JPanel
, also müsste man einen eigenen Weg schreiben, um ein solches Feature zu implementieren.
Eine Möglichkeit, dies zu erreichen, wäre, die Methode paintComponent
zu überschreiben, um bei jeder Aktualisierung der JPanel
ein Hintergrundbild zu zeichnen.
Zum Beispiel würde man eine JPanel
, Unterklasse und ein Feld hinzufügen, das Hintergrundbild zu halten, und überschreiben Sie die paintComponent
Methode:
public class JPanelWithBackground extends JPanel {
private Image backgroundImage;
// Some code to initialize the background image.
// Here, we use the constructor to load the image. This
// can vary depending on the use case of the panel.
public JPanelWithBackground(String fileName) throws IOException {
backgroundImage = ImageIO.read(new File(fileName));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
// Draw the background image.
g.drawImage(backgroundImage, 0, 0, this);
}
}
(. Über Code wurde nicht geprüft)
Die folgender Code könnte verwendet werden, um die JPanelWithBackground
in eine JFrame
hinzuzufügen:
JFrame f = new JFrame();
f.getContentPane().add(new JPanelWithBackground("sample.jpeg"));
In diesem Beispiel der ImageIO.read(File)
Methode wurde verwendet, um die externe JPEG-Datei einzulesen.
können Sie entweder machen eine Unterklasse der Komponente
http://www.jguru.com/faq/view.jsp?EID=9691
Oder Geige mit Wrapper
http://www.java-tips.org/java-se-tips/javax.swing/wrap-a-swing-jcomponent-in-a-background-image.html
Der Background Panel Eintrag zeigt ein paar verschiedene Möglichkeiten, je nach Ihren Anforderungen.
Hier ist ein weiterer schneller Ansatz ohne zusätzliche Platte zu verwenden.
JFrame f = new JFrame("stackoverflow") {
private Image backgroundImage = ImageIO.read(new File("background.jpg"));
public void paint(Graphics g) {
super.paint(g);
g.drawImage(backgroundImage, 0, 0, null);
}
};
Ich habe diese Technik nicht richtig gefunden. Das Bild zeichnet manchmal über die Kindkomponenten oder wird manchmal von dem normalen Rahmenhintergrund abgedeckt, wenn dies nicht der Fall ist. – Boann
Ja, dies funktioniert nicht mit untergeordneten Komponenten. –
Dies ist leicht durch den Austausch des Rahmens Inhaltsbereich mit einem JPanel getan, was Ihr Bild zeichnet:
try {
final Image backgroundImage = javax.imageio.ImageIO.read(new File(...));
setContentPane(new JPanel(new BorderLayout()) {
@Override public void paintComponent(Graphics g) {
g.drawImage(backgroundImage, 0, 0, null);
}
});
} catch (IOException e) {
throw new RuntimeException(e);
}
In diesem Beispiel wird auch das Layout zu Border des Panels des Standard Inhaltsbereich Layout anzupassen.
(Wenn Sie Probleme haben, das Bild zu sehen, könnte man setOpaque(false)
auf einigen anderen Komponenten aufrufen müssen, so dass Sie in den Hintergrund durchschauen können.)
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class BackgroundImageJFrame extends JFrame
{
JButton b1;
JLabel l1;
public BackgroundImageJFrame()
{
setTitle("Background Color for JFrame");
setSize(400,400);
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
/*
One way
-----------------*/
setLayout(new BorderLayout());
JLabel background=new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads\\colorful design.png"));
add(background);
background.setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
background.add(l1);
background.add(b1);
// Another way
setLayout(new BorderLayout());
setContentPane(new JLabel(new ImageIcon("C:\\Users\\Computer\\Downloads \\colorful design.png")));
setLayout(new FlowLayout());
l1=new JLabel("Here is a button");
b1=new JButton("I am a button");
add(l1);
add(b1);
// Just for refresh :) Not optional!
setSize(399,399);
setSize(400,400);
}
public static void main(String args[])
{
new BackgroundImageJFrame();
}
}
wenn Sie NetBeans verwenden Sie hinzufügen können, Ein Jlabel zum Rahmen und durch Eigenschaften ändert sein Symbol zu Ihrem Bild und entfernt den Text. dann verschiebe das Jlabel an den unteren Rand des Jframes oder irgendein Inhaltsfenster durch den Navigator
- 1. Wie setze ich ein Bild auf einen Klick in Swing?
- 2. Setze ein Bild als Hintergrund für einen DrawingArea
- 3. Java GUI (SWING/AWT) - Leerer Frame - Komponenten werden nicht angezeigt
- 4. Wie setze ich ein Bitmap-Bild im Canvas-Hintergrund? AS3
- 5. Wie ändere ich ein Hintergrundbild in einer Java-GUI?
- 6. Wie stelle ich ein Bild als Hintergrund eines Graphen ein?
- 7. Java GUI Swing Rechner Operatoren
- 8. Java Swing GUI auf Kura
- 9. Date Picker GUI Komponente für Java Swing
- 10. Wie setze ich ein Hintergrundbild in Java?
- 11. Java Swing GUI scheint nicht
- 12. Java Swing Wie setze ich JButton-Größe in Nimbus?
- 13. Java GUI Swing Modell Erklärung
- 14. Wie erstelle ich die folgende GUI in Java Swing?
- 15. Sollte ich eine Datenklasse von ihrer Java Swing GUI trennen?
- 16. Opencv java - Laden Bild in GUI
- 17. Java Swing - Manipulation der GUI
- 18. Swing GUI Generator für XML
- 19. Wie setze ich UITableView Hintergrund für Leerzeichen?
- 20. JFreeChart für dynamische xy-Plots in Java Swing GUI-Anwendung
- 21. Wie setze ich ein Bild als Hintergrundbild mit Android Phonegap?
- 22. Wie kann ich ein dynamisches Bild als CSS-Hintergrund haben?
- 23. Java/SWT/Wie Frame aus Schaltfläche entfernen
- 24. Wie setze ich Hintergrund in StackPanel
- 25. Legen Sie ein Bild als Hintergrund in einer Android-Anwendung
- 26. Wie soll ich meine Java GUI organisieren?
- 27. Problem mit Rechteck Zeichnung Java Swing GUI
- 28. Wie setze ich ein Bild über ein anderes Bild?
- 29. Wie man ein Bild als Hintergrund eines JPanel setzt
- 30. Wie kann ich mit einem Java Swing GUI einen Server Socket im Hintergrund ausführen und trotzdem die GUI verwenden?
Dies beantwortet die Frage nicht ganz. Es fügt ein Hintergrundbild in ein Panel ein, fügt es dann aber einfach in das normale Layout ein. Die Frage war, wie man einen Hintergrund auf einen Rahmen hinter anderen Komponenten legt. – Boann
Würde es Probleme verursachen, wenn Sie es als ImageObserver "null" geben würden? – georgiaboy82