Изменение макета по умолчанию для JFrame не работает? - PullRequest
0 голосов
/ 13 марта 2019

Я пытался изменить макет по умолчанию JFrame с BorderLayout на GridLayout, но макет не меняется.

Ниже мой код:

import java.awt.GridLayout;
import javax.swing.JFrame;

public class JFrameTest extends JFrame { 
    public JFrameTest() {       
        System.out.println("layout before is " + this.getLayout().toString());
        this.setLayout(new GridLayout(1,2));
        System.out.println("layout after is " + this.getLayout().toString());
    }

    public static void main(String[] args) {
        JFrameTest jft = new JFrameTest();
    }
}

Результат кода:

layout before is java.awt.BorderLayout[hgap=0,vgap=0]
layout after is java.awt.BorderLayout[hgap=0,vgap=0]

Почему макет не меняется на GridLayout?

1 Ответ

2 голосов
/ 13 марта 2019

Вы устанавливаете макет ContentPane, а затем проверяете макет JFrame.

System.out.println("layout before is " + this.getContentPane().getLayout().toString());
this.getContentPane().setLayout(new GridLayout(1, 2));
System.out.println("layout after is " + this.getContentPane().getLayout().toString());

Это дает желаемый результат.

РЕДАКТИРОВАТЬ: ОП изменил свой исходный код, делаяэтот ответ не совсем правильный.В его случае это было бы правильное решение:

this.setRootPaneCheckingEnabled(false);
System.out.println("layout before is " + this.getLayout().toString());
this.setLayout(new GridLayout(1, 2));
System.out.println("layout after is " + this.getLayout().toString());
...