Hintergrundbild in eine GUI einfügen (Java)
Aus Byte-Welt Wiki
Version vom 16. Juni 2018, 18:08 Uhr von L-ectron-X (Diskussion | Beiträge) (L-ectron-X verschob die Seite Hintergrundbild in einem Fenster einfügen (Java) nach Hintergrundbild in eine GUI einfügen (Java), ohne dabei eine Weiterleitung anzulegen)
Standard-GUIs sind langweilig? Zur Illustration kann man Swing-GUIs in Java relativ einfach mit einem Hintergrundbild versehen.
Folgende Klasse erbt von JPanel
und kann daher relativ flexibel in einer GUI eingesetzt werden.
class BackgroundImagePanel extends JPanel {
private Image image;
private boolean fitImage;
/**
* Erzeugt ein BackgroundImagePanel, das sich zunächst wie ein "normales" JPanel verhält.
*/
BackgroundImagePanel() {
super();
}
/**
* Erzeugt ein BackgroundImagePanel, das sich zunächst wie ein "normales" JPanel verhält.
*
* @param layout ein LayoutManager zur Anordnung von GUI-Komponenten für das Panel.
*/
BackgroundImagePanel(LayoutManager layout) {
super(layout);
}
/**
* Nimmt das zu zeichnende Bild entgegen und nimmt Einstellungen vor, die das Hintergrundbild im Originalformat
* und in den Original-Dimensionen ausgeben werden.
*
* @param image das zu zeichnende Bild
*/
void setImage(Image image) {
this.setImage(image, false);
}
/**
* Nimmt das zu zeichnende Bild entgegen und nimmt Einstellungen vor, die das Hintergrundbild im Originalformat
* und und in den Original-Dimensionen oder in Format und Dimension des Panels ausgeben werden.
*
* @param image das zu zeichnende Bild
* @param fitImage bei Übergabe von true wird das Bild immer an die Größe des Panel angepasst (kann zu Verzerrung führen),
* ansonsten wird immer das Original gezeichnet.
*/
void setImage(Image image, boolean fitImage) {
this.image = image;
this.fitImage = fitImage;
validate();
repaint();
}
/**
* @see javax.swing.JComponent#getPreferredSize()
*/
@Override
public Dimension getPreferredSize() {
if(image != null) {
System.out.println(this.getSize());
return new Dimension(image.getWidth(this), image.getHeight(this));
}
return super.getPreferredSize();
}
/**
* @see javax.swing.JComponent#paintComponent(Graphics g)
*/
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if(image != null) {
if(fitImage) {
Dimension size = this.getSize();
g.drawImage(image, 0, 0, size.width, size.height, this);
} else {
g.drawImage(image, 0, 0, this);
}
}
}
}