0
저는 컴퓨터 과학 수업에 대한 소개에서 방금 배운 GUI 작성에 익숙해 지도록 간단한 계산기를 만들려고합니다. 내가 원하는 방식으로 GUI를 배열하는 데 문제가 있습니다. 나는 BoxLayout에서는 완벽하다고 생각하지만, 나는 그것을 사용하려고 할 때마다, 내 프로그램이 오류 로그와 충돌 : 나는이 변경 될 때Java : BoxLayout을 공유 할 수 없습니다. 오류
import java.awt.FlowLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.BoxLayout;
import javax.swing.JButton;
public class GUI implements Runnable{
@Override
public void run() {
JFrame window = new JFrame("Calculator");
window.setLayout(new BoxLayout(window, BoxLayout.Y_AXIS));
JPanel display = new JPanel();
JLabel label = new JLabel("display test");
display.add(label);
JPanel row1 = new JPanel();
JButton sevenButton = new JButton("7");
JButton eightButton = new JButton("8");
JButton nineButton = new JButton("9");
JButton divideButton = new JButton("÷");
JPanel row2 = new JPanel();
JButton fourButton = new JButton("4");
JButton fiveButton = new JButton("5");
JButton sixButton = new JButton("6");
JButton multiplyButton = new JButton("x");
JPanel row3 = new JPanel();
JButton oneButton = new JButton("1");
JButton twoButton = new JButton("2");
JButton threeButton = new JButton("3");
JButton minusButton = new JButton("-");
JPanel row4 = new JPanel();
JButton periodButton = new JButton(".");
JButton zeroButton = new JButton("0");
JButton enterButton = new JButton("=");
JButton addButton = new JButton("+");
row1.add(sevenButton);
row1.add(eightButton);
row1.add(nineButton);
row1.add(divideButton);
row2.add(fourButton);
row2.add(fiveButton);
row2.add(sixButton);
row2.add(multiplyButton);
row3.add(oneButton);
row3.add(twoButton);
row3.add(threeButton);
row3.add(minusButton);
row4.add(periodButton);
row4.add(zeroButton);
row4.add(enterButton);
row4.add(addButton);
window.add(display);
window.add(row1);
window.add(row2);
window.add(row3);
window.add(row4);
window.pack();
window.setVisible(true);
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
이 프로그램은 잘 작동 : 여기
Exception in thread "AWT-EventQueue-0" java.awt.AWTError: BoxLayout can't be shared
at javax.swing.BoxLayout.checkContainer(Unknown Source)
at javax.swing.BoxLayout.invalidateLayout(Unknown Source)
at javax.swing.BoxLayout.addLayoutComponent(Unknown Source)
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at javax.swing.JFrame.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at GUI.run(GUI.java:64)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
내 코드입니다 FlowLayout에 BoxLayout하지만, 그것은 내 프로그램에 대해 원하는 레이아웃 유형이 아닙니다.
//window.setLayout(new BoxLayout(window, BoxLayout.Y_AXIS));
JPanel contentPane = new JPanel();
contentPane.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
window.setContentPane(contentPane);
당신이 BoxLayout
프레임의 컨텐츠 구획으로 사용되는 패널에 추가되어 있는지 확인하다이 방법 :
이'JFrame'가'contentPane'을 포함하는'JRootPane' 있습니다
다른 옵션은 "contentPane에"패널에 직접 모든 구성 요소를 추가 한 다음 프레임에이 패널을 추가하는 것입니다 구성 요소가 배치되는 곳입니다. 'JFrame # setLayout'가이 호출을'contentPane'에 전달하지 않을 가능성이 있습니다. 이것은 문제를 설명 할 것입니다 – MadProgrammer