프레임에 2 개의 JPanels가 있습니다. 첫 번째 패널에는 버튼 등의 자바 항목이 포함되어 있습니다. 추가 한 두 개의 버튼이 나타나지만 Jscinner는 창 크기를 조정 한 직후에 나타납니다. 나는 이것이 내가 추가 할 다른 항목들에서도 일어날 것이라고 생각한다. 이 문제를 어떻게 해결할 수 있습니까?자바 항목은 창 크기가 조정 된 후에 만 표시됩니다.
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerNumberModel;
public class StartingPoint {
static JFrame window;
static DrawingArea draw;
static JButton b1, b2;
static JPanel userInt;
static JSpinner gravitySpinner;
public static void main(String[] args) {
window = new JFrame("Ball");
window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
window.setSize(600, 400);
window.setLayout(new BorderLayout());
window.setVisible(true);
draw = new DrawingArea();
window.add(draw, BorderLayout.CENTER);
userInt = new JPanel();
window.add(userInt, BorderLayout.NORTH);
b1 = new JButton("Start");
b2 = new JButton("aaa");
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
draw.setUp();
}
});
userInt.add(b1);
userInt.add(b2);
SpinnerNumberModel gravityModel = new SpinnerNumberModel(.9, .1, 2, .1);
gravitySpinner = new JSpinner(gravityModel);
userInt.add(gravitySpinner);
}
}
그리고 [Swing threading policy] (http://docs.oracle.com/javase/7/docs/)를 존중하기 위해'EventQueue.invokeLater()'호출에서 모든 메소드를 주 메소드로 감싸고 자합니다. api/javax/swing/package-summary.html # threading) – Robin
실행 메소드와 main mathod에서 main 메소드의 모든 코드를 옮겨야한다.이 $ SwingUtilities.invokeLater (new StartingPoint())를 추가해야한다. ? – Alex
@Alex : 위의 코드에서 * everything * static을 없애고 클래스 자체에서 JPanel GUI를 만든 다음 기본 클래스에서 클래스를 초기화하는 Runnable을 만들고 클래스의 JPanel을 JFrame에 추가 한 다음 JFrame. 예를 들어 위의 ** 편집 2 **를 참조하십시오. –