На layout.setBackGround (Color.) Не влияет - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующий код, и результат такой же, как на картинке (я не добавил повторяющуюся часть кода). Каким-то образом панель получает цвет, но ту часть, где разработан макет. Чего мне не хватает?

class Elements extends JPanel {

Elements() {

    setLayout(new GridBagLayout());
    GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(10, 10, 10, 10);

    JLabel l1 = new JLabel("l1");
    c.gridx = 0;
    c.gridy = 0;
    add(l1, c);
    JLabel l2 = new JLabel("l2");
    c.gridx = 0;
    c.gridy = 1;
    add(l2, c);
}

public class MyFrame extends JFrame {

public static void main(String[] args) {

    JFrame frame = new JFrame("Simple Calc");
    JPanel p = new JPanel();
    Elements elements = new Elements();
    frame.add(p);
    p.add(elements);        
    frame.setSize(1000, 500);
    frame.setVisible(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    p.setBackground(Color.blue);

enter image description here

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Ваш Elements класс расширяется JPanel. Вы видите цвет по умолчанию JPanel, так как вы не установили цвет.

Вы можете сделать либо:

elements.setBackground( Color.BLUE );

чтобы специально установить его фон.

или

elements.setOpaque( false );

, чтобы сделать панель прозрачной, чтобы вы видели фон ее родительской панели. Это удобство, поэтому вам не нужно устанавливать фон дважды, если вы когда-нибудь решите его изменить.

0 голосов
/ 08 января 2019

На вашей панели p элементы находятся на переднем плане. попробуйте сделать elements.setBackground(Color.blue); для достижения желаемого поведения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...