Gibt es Methoden, um ein Bild als Hintergrund in a JFrame
?
Einstellen von Hintergrundbildern in JFrame
Michael myers
Es gibt keine integrierte Methode, aber es gibt mehrere Möglichkeiten, dies zu tun. Der einfachste Weg, der mir im Moment einfällt, ist:
- Erstellen Sie eine Unterklasse von
JComponent
. - Überschreiben Sie die
paintComponent(Graphics g)
-Methode, um das Bild zu malen, das Sie anzeigen möchten. - Stellen Sie den Inhaltsbereich ein des
JFrame
diese Unterklasse sein.
Etwas Beispielcode:
class ImagePanel extends JComponent {
private Image image;
public ImagePanel(Image image) {
this.image = image;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this);
}
}
// elsewhere
BufferedImage myImage = ImageIO.read(...);
JFrame myJFrame = new JFrame("Image pane");
myJFrame.setContentPane(new ImagePanel(myImage));
Beachten Sie, dass dieser Code die Größenänderung des Bildes nicht anpasst JFrame
wenn du das wolltest.
-
Sie sollten die Methode super.paintComponents() für die Methode painComponent verwenden.
– Sadschad
3. Februar 2013 um 19:02 Uhr
Savvas Dalkitsis
Versuche dies :
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test {
public static void main(String[] args) {
JFrame f = new JFrame();
try {
f.setContentPane(new JLabel(new ImageIcon(ImageIO.read(new File("test.jpg")))));
} catch (IOException e) {
e.printStackTrace();
}
f.pack();
f.setVisible(true);
}
}
Dies führt übrigens dazu, dass der Inhaltsbereich kein Container ist. Wenn Sie Dinge hinzufügen möchten, müssen Sie ein JPanel ableiten und die paintComponent-Methode überschreiben.
-
Tatsächlich erweitert JLabel (wie alle JComponents) Container. Ich frage mich, was passiert, wenn Sie etwas zu einem Etikett hinzufügen?
– Michael myers
♦30. Juni 2009 um 17:50 Uhr
-
eigentlich nichts… ich habe es gerade probiert. Sie können zum Beispiel eine JTextArea hinzufügen, aber sie zeichnet nicht.
– Savvas Dalkitsis
30. Juni 2009 um 17:55 Uhr
-
Es wird nichts angezeigt, da das Etikett ein Null-Layout hat. Legen Sie den Layout-Manager des Etiketts fest und Sie können ihm Komponenten hinzufügen. Beachten Sie jedoch, dass die Größe der Komponente immer noch durch die Größe des Bildes bestimmt wird, nicht durch die dem Etikett hinzugefügten Komponenten.
– camickr
29. August 2016 um 14:04 Uhr
Du kannst den … benutzen Hintergrund-Panel Klasse. Es führt das benutzerdefinierte Malen wie oben beschrieben aus, bietet Ihnen jedoch die Möglichkeit, das Bild skaliert, gekachelt oder in normaler Größe anzuzeigen. Außerdem wird erklärt, wie Sie ein JLabel mit einem Bild als Inhaltsbereich für den Rahmen verwenden können.
Yugaanks
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class BackgroundImageJFrame extends JFrame
{
JButton b1;
JLabel l1;
public BackgroundImageJFrame() {
setSize(400,400);
setVisible(true);
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);
}
public static void main(String args[])
{
new BackgroundImageJFrame();
}
}
sehen Sie sich den untenstehenden Link an
http://java-demos.blogspot.in/2012/09/setting-background-image-in-jframe.html