programing tip

BoxLayout을 공유 할 수 없습니다 오류

itbloger 2020. 7. 30. 10:06
반응형

BoxLayout을 공유 할 수 없습니다 오류


JFrameboxlayout을 사용하려는 Java 클래스가 있지만 오류가 발생 java.awt.AWTError: BoxLayout can't be shared합니다. 이 문제가있는 다른 사람들을 보았지만 컨텐츠 창에 상자 레이아웃을 만들어 문제를 해결했지만 이것이 내가하고있는 일입니다. 내 코드는 다음과 같습니다.

class edit_dialog extends javax.swing.JFrame{
    javax.swing.JTextField title = new javax.swing.JTextField();
    public edit_dialog(){
        setDefaultCloseOperation(javax.swing.JFrame.DISPOSE_ON_CLOSE);
        setTitle("New entity");
        getContentPane().setLayout(
            new javax.swing.BoxLayout(this, javax.swing.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!"));

참고 URL : https://stackoverflow.com/questions/761341/boxlayout-cant-be-shared-error

반응형