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

JFrameboxlayout을 사용하려는 이 Java 클래스가 있지만 java.awt.AWTError: BoxLayout can't be shared. 나는이 문제를 가진 다른 사람들을 보았지만, 그들은 contentpane에 boxlayout을 만들어서 그것을 해결했지만, 그것이 내가 여기서하는 일입니다. 내 코드는 다음과 같습니다.

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);
    }
}



답변

귀하의 문제는 당신이 만드는 것입니다 BoxLayoutA의을 JFrame( this), 그러나의 레이아웃으로 설정 JPanel( getContentPane()). 시험:

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


답변

나는 또한 이것을 만드는이 오류를 발견했습니다.

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

JPanel은 BoxLayout에 전달할 때 아직 초기화되지 않았습니다. 따라서이 줄을 다음과 같이 분할하십시오.

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!"));


답변