추가 "나는 대화가 중간에서 수용 가능한 크기로 표시되도록 변경할 수있는 방법이 있습니까?"
당신은 단지에 구성 요소를 추가하는 경우, 그것을 포장하고, 그것을 null로 상대적인 위치를 설정, 그것은 그것은 .pack()
대신 크기를 설정하는 것이 바람직하다
잘 작동합니다. 팩이 작동하려면 실제로 구성 요소를 추가해야합니다. .pack()
은 이름에서 알 수 있듯이 정확히 수행됩니다. 추가 된 모든 구성 요소의 기본 크기를 고려하여 프레임을 포장하십시오.
setLocationRelativeTo()
도 구성 요소에 상대적으로 대화 상자를 설정합니다. null
을 사용하면 화면 중앙에 항상 표시됩니다. 그러나 부모를 기준으로 위치를 설정하면 프레임 위에 프레임의 중앙에 표시됩니다.
나는 당신이 타이머를 달성하기 위해 노력하는지 전혀 생각이 없다, 그래서 난 그냥 사이드 참고로 예를
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.Timer;
public class Test {
public static void main(String[] args) {
JFrame f = new JFrame();
final MyDialog dialog = new MyDialog(f, "Title", true);
Timer timer = new Timer(10000, new ActionListener() {
public void actionPerformed(ActionEvent e) {
dialog.setVisible(false);
dialog.dispose();
}
});
timer.setRepeats(false);
timer.start();
dialog.setVisible(true);
System.out.println("Dialog closed");
}
private static class MyDialog extends JDialog {
public MyDialog(JFrame frame, String title, boolean modal) {
super(frame, title, modal);
setLayout(new BorderLayout());
add(new JButton("NORTH"), BorderLayout.NORTH);
add(new JButton("SOUTH"), BorderLayout.SOUTH);
add(new JButton("EAST"), BorderLayout.EAST);
add(new JButton("WEST"), BorderLayout.WEST);
add(new JButton("CENTER"), BorderLayout.CENTER);
pack();
setLocationRelativeTo(null);
}
}
}
참조 노 코멘트
선호 , 당신은이 같은 이벤트 발송 스레드 (EDT)에서 스윙 애플 리케이션을 실행해야합니다
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run() {
// the code from your main method here
}
});
}
또는 ['SwingUtilities.invokeLater'] (http://stackoverflow.com/questions/8847083/swingutilities-invokelater-vs-eventqueue-invokelater). – Justin