JButton рисует позади изображения - PullRequest
0 голосов
/ 12 апреля 2011

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

    public void drawStartScreen(){
    startScreenOn = true;
    Graphics2D b = buffer.createGraphics();
    b.setColor( Color.WHITE );
    b.fillRect(0, 0, 800, 600);
    b.drawImage(start,0,0,null);

    setLayout( null );
    button = new JButton("Start Game");
    button.setBounds(10,10,100,100);
    button.setVisible( true );
    add(button);
}

Сначала рисует изображение, а затем кнопка, но кнопка все равно рисует позади изображения.

Ответы [ 3 ]

2 голосов
/ 12 апреля 2011

Я рекомендую вам использовать JLayeredPane (я использую обычную живопись только в качестве крайней меры).

Если вы все еще заинтересованы в смешивании 'low-рисование уровня с иерархией JComponent более высокого уровня, посмотрите на вопрос о a JFrame, который имеет несколько слоев.

2 голосов
/ 12 апреля 2011

Вы смешиваете рисование и добавление компонентов, и вам определенно не следует этого делать.Вместо этого добавляйте компоненты, когда вы создаете экран или когда они вам нужны, но убедитесь, что вы делаете это только один раз.Затем по отдельности измените компоненты, которые требуют изменения окраски внутри метода paintComponent().

0 голосов
/ 12 апреля 2011

Переопределить метод рисования на JFrame:

@Override
public void paint(Graphics g) {
    super.paint(g);
    Graphics2D b = (Graphics2D)g;
    b.setColor( Color.WHITE );
    b.fillRect(0, 0, 800, 600);
    b.drawImage(start.getImage(),0,0,null);
    b.dispose();        
}

Обратите внимание, что это вызывает paint() для родителя и dispose() в графическом контексте, когда это будет сделано.Я только что попробовал этот код, и он работал для меня.

...