2014-01-25 2 views
2

Я делаю небольшое приложение, но хочу установить изображение в качестве фона во всем окне. Я попытался сделать это как внизу, но ничего не произошло. Изображение находится в папке, где класс указан как путь, на который я помещаю только имя ... Можете ли вы мне помочь? что я могу сделать?Установить изображение в качестве фона для JFrame

Container c = getContentPane(); 
    setContentPane(c); 
    setContentPane(new JLabel(new ImageIcon("Chrysanthemum.jpg"))); 
+0

Конечно, не будет работать, JLabel - это метка, а не фон. –

+0

как я могу поместить изображение в качестве фона? – user3233650

+0

[This] (http://stackoverflow.com/a/1065014/3226218) должен помочь вам. – Didericis

ответ

0

Одна возможность состоит в том, чтобы добавить BorderLayout в JFrame, который должен заполнить JFrame с JLabel, а затем установить фон, добавляя JLabel к раме, а затем добавлять компоненты к нему, как это:

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.FlowLayout; 

import javax.swing.ImageIcon; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JLabel; 

public class Foo extends JFrame { 

    public Foo() { 
     setLayout(new BorderLayout()); 


JLabel background = new JLabel(new ImageIcon("Untitled.png")); 
    add(background); 
    background.setLayout(new FlowLayout()); 
    background.add(new JButton("foo")); 
    setSize(500, 500); 
    setVisible(true); 
} 

public static void main(String[] args) { 
    Foo foo = new Foo(); 
} 
} 

Вышеупомянутые работы для меня, с JButton в верхнем центре 500 на 500 JFrame с указанным фоном.

+0

он не работает ... я не знаю, почему – user3233650

+0

где у меня должен быть изображение? Я имею его в той же папке с классом ... и я указываю только имя ... но он не работает – user3233650

+0

@ user3233650 Подход (в основном) правильный, возможная причина, по которой он не работает, заключается в том, что местоположение изображение не там, где вы думаете, это ... – MadProgrammer

0

Что бы я сделал, это создать JPanel с фоновым изображением и добавить его в JFrame. У меня уже есть класс BackgroundPanel прямо в одном из моих проектов, и это настройка, которую у меня есть для этого.

public class MyFrame extends JFrame { 

    private BackgroundPanel bgPanel; 

    public MyFrame() { 
     bgPanel = new BackgroundPanel("Chrysanthemum.jpg"); 

     setTitle("MyFrame"); 
     setResizable(false); 
     setContentPane(bgPanel); 
     pack(); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setLocationRelativeTo(null); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     new MyFrame(); 
    } 
} 

// -- BackgroundPanel class 

public class BackgroundPanel extends JPanel { 
    private static final long serialVersionUID = 1L; 

    private Image bg; 

    public BackgroundPanel(String path) { 
     this(Images.load(path).getImage()); 
    } 

    public BackgroundPanel(Image img) { 
     this.bg = img; 
     setPreferredSize(new Dimension(bg.getWidth(null), bg.getHeight(null))); 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     if (bg != null) g.drawImage(bg, 0, 0, getWidth(), getHeight(), null); 
    } 
} 
+0

Если вы хотите, чтобы фон был изменен, это пустая трата усилий. Кроме того, масштабирующее изображение таким образом не учитывает отношение исходного изображения и обычно не дает хорошего результата - IMHO – MadProgrammer

Смежные вопросы