programing

레이아웃 할당 시 오류: BoxLayout을 공유할 수 없습니다.

shortcode 2022. 9. 25. 15:10
반응형

레이아웃 할당 시 오류: BoxLayout을 공유할 수 없습니다.

이 자바가 있습니다.JFrameclass - box out을 사용하려고 하는데 다음과 같은 오류가 나타납니다.java.awt.AWTError: BoxLayout can't be shared이 문제를 안고 있는 사람을 본 적이 있습니다만, 컨텐츠 페인에 박스 아웃을 작성함으로써 문제를 해결했습니다만, 이것이 바로 제가 여기서 하고 있는 일입니다.제 코드는 다음과 같습니다.

class EditDialog extends JFrame {
    JTextField title = new JTextField();
    public editDialog() {
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setTitle("New entity");
        getContentPane().setLayout(
            new BoxLayout(this, BoxLayout.PAGE_AXIS));
        add(title);
        pack();
        setVisible(true);
    }
}

문제가 되는 것은, 그 때문에,BoxLayout잠깐 동안JFrame(this의 레이아웃으로 설정합니다.JPanel(getContentPane()). 시험해 보세요.

getContentPane().setLayout(
    new BoxLayout(getContentPane(), BoxLayout.PAGE_AXIS)
);

또, 다음의 에러를 발견했습니다.

JPanel panel = new JPanel(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

BoxLayout에 전달할 때 JPanel이 아직 초기화되지 않았습니다.이 선을 다음과 같이 분할합니다.

JPanel panel = new JPanel();
panel.setLayout(new BoxLayout(panel, BoxLayout.PAGE_AXIS));

이거면 될 거야.

앞의 답변에서 강조해야 할 중요한 점은 BoxLayout의 타깃(첫 번째 파라미터)은 다음 예시와 같이 setLayout 메서드가 호출되는 컨테이너와 같아야 한다는 것입니다.

JPanel XXXXXXXXX = new JPanel();
XXXXXXXXX.setLayout(new BoxLayout(XXXXXXXXX, BoxLayout.Y_AXIS));

에서 레이아웃을 사용하는 경우JFrame예를 들어 다음과 같습니다.

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame, BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));

컨트롤이 실제로 추가되고 있습니다.ContentPane그 때문에, 그 「공유」라고 생각됩니다.JFrame및 그ContentPane

대신 다음을 수행합니다.

JFrame frame = new JFrame();
frame.setLayout(new BoxLayout(frame.getContentPane(), BoxLayout.Y_AXIS));
frame.add(new JLabel("Hello World!"));

언급URL : https://stackoverflow.com/questions/761341/error-upon-assigning-layout-boxlayout-cant-be-shared

반응형