2015-12-15 7 views
3

Я хочу нарисовать JPanel на JFrame. Цвет фона для JFrame отличается для JPanel. До сих пор этот мой код:Различные цвета фона для JFrame и JPanel

import java.awt.Color; 
import java.awt.Dimension; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class DifferentColor extends JFrame{ 

JPanel p; 

GradientColor(){ 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setPreferredSize(new Dimension(500, 500)); 
    this.getContentPane().setBackground(Color.yellow);   
    p = new JPanel(); 
    p.setPreferredSize(new Dimension(400, 400)); 
    p.setBackground(Color.red); 
    this.add(p); 
    this.pack(); 
    this.setVisible(true); 
    } 

    public static void main(String[] args) { 
    // TODO code application logic here 
     new DifferentColor(); 
    } 
} 

Когда я запускаю код, красный цвет. Не красный (JPanel) на желтом (JFrame). Как его решить?

+0

Код вашего кода даже компилируется, имя класса 'DifferentColor' и имя конструктора' GradientColor' не соответствуют – Arvind

+0

'JFrame' использует' BorderLayout', затем 'JPanel' (' this.add (p); '), охватывающий весь 'getContentPane()', вы можете использовать GridBagLayout или BoxLayout для JFrame, тогда часть 'getContentPane()' должна быть видимой на экране – mKorbel

ответ

-1

Ваша проблема в том, что JPanel имеет тот же размер, что и ваш JFrame. Причина была объяснена Арвиндом.

Следующий фрагмент присвойте JPanel области North и добавьте толстую синюю рамку вокруг нее для демонстрации.

public void showFrame() { 
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    this.setPreferredSize(new Dimension(500, 500)); 
    this.getContentPane().setBackground(Color.yellow); 
    JPanel p = new JPanel(); 
    p.setPreferredSize(new Dimension(400, 400)); 
    p.setBackground(Color.red); 
    Border border = BorderFactory.createLineBorder(Color.blue, 10); 
    border.isBorderOpaque(); 
    p.setBorder(border); 
    this.add(p, BorderLayout.NORTH); 
    this.pack(); 
    this.setVisible(true); 
} 

public static void main(String[] args) { 
    new DifferentColor().showFrame(); 
} 

Посмотрите также в Swing tutorial about use of panels.

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