JFrame
boxlayout을 사용하려는 이 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);
}
}
답변
귀하의 문제는 당신이 만드는 것입니다 BoxLayout
A의을 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!"));