2012-04-11 12 views
0

Also ich mache eine GUI, und ich habe ein Hintergrundbild dafür. Ich weiß nicht, wie man es als Hintergrund setzt, also wäre jede Hilfe gut. eine Erkundung wäre auch gut. Nachdem wir dieses Bild als Hintergrund erhalten haben, wie wird die Größe des Bildes auf die Größe des Fensters gebracht? wie image.setSize(frame.getHeight(), frame.getWidth()); aber ich weiß nicht, ob das funktionieren würde. Der Bildname lautet ABC0001.jpg und der Bildname ist frame. Vielen Dank!Wie ändere ich ein Hintergrundbild in einer Java-GUI?

+0

Wahrscheinlich duplizieren von: http://stackoverflow.com/questions/1064977/setting-background-images-in-jframe – davidfrancis

+0

Bitte suchen Sie zuerst SO. Diese beiden Fragen wurden SO * viele * mal zuvor gestellt und beantwortet. –

Antwort

3

Um das Bild zu erhalten, um die Größe, können Sie entweder


public void paintComponent(Graphics g) { 
g.drawImage(img, 0, 0, getWidth(), getHeight(), this); // draw the image 
} 

verwenden oder Sie können einen Componentlistener verwenden, der wie folgt implementiert ist:

Die Bildqualität verschlechtert sich Zeit mit der zweiten Lösung, so empfiehlt es sich, das Original und die Kopie getrennt zu halten.

+0

Ein Tipp. Da 'paintComponent' eine' JComponent' oder alles, was von ihr erbt, und 'JComponent'' ImageObserver' impliziert, ändern Sie die 'null' in draw zu' this'. Gute Ansprache 1) Erwähnen Sie andere Möglichkeiten, die Größe von Bildern zu ändern, obwohl ich glaube, dass "getScaledInstance" weitgehend aufgegeben wird zugunsten noch besserer Möglichkeiten, ein Bild zu skalieren. 2) Eine Notiz machen, um das Original zu behalten. –

+0

'RenderingHints' kann verwendet werden, um einen bestimmten Interpolationstyp in' drawImage() 'vorzuschlagen. – trashgod

+0

was macht das 'this'? – PulsePanda

0

Erstellen Sie eine Klasse die erweitert JPanel. Haben diese Klasse das Bild laden, indem paintcomponent zwingende

class BackgroundPanel extends JPanel 
{ 
    Image img; 
    public BackgroundPanel() 
    { 
     // Read the image and place it in the variable img so it can be used in paintComponent 
     img = Toolkit.getDefaultToolkit().createImage("ABC0001.jpg"); 
    } 

    public void paintComponent(Graphics g) 
    { 
     g.drawImage(img, 0, 0, null); // draw the image 
    } 
} 

Nun, da Sie diese Klasse haben, fügen Sie einfach diese zu Ihrem JFrame (oder wo auch immer Sie den Hintergrund wollen).

//create refrence if you want to add stuff ontop of the panel 
    private BackgroundPanel backGroundPanel; 

//constructor 
    add(backGroundPanel, BorderLayout.CENTER); 

Die Größe des Hintergrundes wird der gesamte Rahmen, so dass keine Notwendigkeit, füllen Sie es zu skalieren, wenn Sie es wollen, dass kleinere

+0

Ich glaube, es ist besser, das Hintergrundbild als Inhaltsfenster festzulegen, da dann alle weiteren GUI-Komponenten "über" dem Hintergrundbild erscheinen. – davidfrancis

+0

Angenommen, so. Ich habe das gerade auf den Kopf geschrieben. Wenn Sie die Komponenten im backgroundPanel hinzufügen, erscheinen sie immer noch "über" dem Hintergrundbild. –

+0

Ja werden sie, es ist ziemlich gut für den oberen Teil Ihres Kopfes, ich musste suchen 8 =} – davidfrancis

Verwandte Themen