2013-05-01 3 views
0

Я хочу, чтобы иметь возможность изменить один из моих JPanel-фона на изображение, которое я создал, и по-прежнему добавлять компоненты поверх него, однако они не отображаются.Как добавить компоненты JPanel поверх окрашенного фона

package userInterface; 

import javax.swing.*; 
import java.awt.*; 

@SuppressWarnings("serial") public class BoardPanel extends JPanel { 

    private Image img; 

    public BoardPanel() { 
    img = new ImageIcon("images/board.png").getImage(); 
    JButton button = new JButton("TEST ME"); 
    add(button); 

    Dimension size = new Dimension(img.getWidth(null), img.getHeight(null)); 
    setPreferredSize(size); 
    setMinimumSize(size); 
    setMaximumSize(size); 
    setSize(size); 
    setLayout(null); 
    } 

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

} 

ответ

1

Причина отсутствия видимости JButton на JPanel является то, что вы настраиваете макет JPanel быть null:

setLayout(null); 

Настройка макета быть null делает вас, чтобы установить расположение компонентов явно, что тоже очень плохая практика. Вы должны удалить эту линию и позволить внутреннему layoutSwing сделать свою работу изящно.
Как примечание стороны, я хотел бы подчеркнуть, на том, что всякий раз, когда вы переопределение метода paintComponent, первое утверждение этого метода должно быть super.paintComponent(g)

+0

переопределение GetPreferredSize для JPanel :-) – mKorbel

1

Если вы перезаписать paintComponent(Graphics g), всегда помнить, чтобы позвонить super.paintComponent(g) первым. Таким образом, все, что обычно будет окрашено, будет также окрашено.

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