Java JFrame不';不能适应规定的尺寸

Java JFrame不';不能适应规定的尺寸,java,swing,size,jframe,Java,Swing,Size,Jframe,JFrame不适合我设置的大小。有人知道为什么吗?我使用了Dimension类来指定框架的大小 public void createBaseFrame() { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } frame = ne

JFrame不适合我设置的大小。有人知道为什么吗?我使用了Dimension类来指定框架的大小

    public void createBaseFrame() {

    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (Exception e) {
        e.printStackTrace();
    }

    frame = new JFrame("Windows Shutdown Timer v" + CURRENT_VERSION);
    frame.setLayout(new GridLayout(3, 1, 5, 5));

    topPanel = new JPanel();
    centerPanel = new JPanel();
    bottomPanel = new JPanel();

    topPanel.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY, 1));
    centerPanel.setBorder(BorderFactory
            .createLineBorder(Color.DARK_GRAY, 1));
    bottomPanel.setBorder(BorderFactory
            .createLineBorder(Color.DARK_GRAY, 1));

    menuBar = new JMenuBar();

    datei = new JMenu("Datei");
    template = new JMenu("Vorlagen");
    about = new JMenu("Über");

    dateiClose = new JMenuItem("Programm beenden");
    templateSave = new JMenuItem("Vorlage speichern");
    templateExport = new JMenuItem("Vorlage exportieren");
    templateImport = new JMenuItem("Vorlage importieren");
    aboutInformation = new JMenuItem("Informationen");
    aboutVisitWebsite = new JMenuItem("Webseite besuchen");

    timerSetting = new JLabel("Zeit in Minuten:");
    possibleActions = new JLabel("Aktion wählen:");
    remainingTime = new JLabel(
            "Verbleibende Zeit bis zum herunterfahren: 10:23 Minuten");

    timeSpinner = new JSpinner();

    String[] possibleActionsData = { "herunterfahren", "abmelden",
            "neu starten", "sperren" };
    actionBox = new JComboBox<String>(possibleActionsData);

    timerButton = new JButton("Timer starten");
    timerButton.setSize(new Dimension(150, 40));

    datei.add(dateiClose);
    template.add(templateSave);
    template.add(templateImport);
    template.add(templateExport);
    about.add(aboutVisitWebsite);
    about.add(aboutInformation);

    menuBar.setSize(500, 5);
    menuBar.add(datei);
    menuBar.add(template);
    menuBar.add(about);

    topPanel.add(menuBar);

    centerPanel.setLayout(new GridLayout(2, 2, 0, 0));
    centerPanel.add(timerSetting);
    centerPanel.add(timeSpinner);
    centerPanel.add(possibleActions);
    centerPanel.add(actionBox);

    bottomPanel.setLayout(new GridLayout(1, 2, 0, 0));
    bottomPanel.add(remainingTime);
    bottomPanel.add(timerButton);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setPreferredSize(new Dimension(500, 250));
    frame.setLocationRelativeTo(null);

    frame.add(topPanel);
    frame.add(centerPanel);
    frame.add(bottomPanel);

    frame.setResizable(false);
    frame.setVisible(true);

} // end createBaseFrame()

} // end class BaseFrame
public void createBaseFrame(){
试一试{
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}捕获(例外e){
e、 printStackTrace();
}
frame=新JFrame(“Windows关机计时器v”+当前版本);
frame.setLayout(新的GridLayout(3,1,5,5));
topPanel=新的JPanel();
centerPanel=新的JPanel();
底部面板=新的JPanel();
topPanel.setBorder(BorderFactory.createLineBorder(Color.DARK_GRAY,1));
中心面板。订单(BorderFactory)
.createLineBorder(颜色为深灰色,1));
底部面板。订单(BorderFactory
.createLineBorder(颜色为深灰色,1));
menuBar=newjmenubar();
datei=新JMenu(“datei”);
模板=新JMenu(“沃拉根”);
关于=新JMenu(“Über”);
dateiClose=新的JMenuItem(“Programm beenden”);
templateSave=新的JMenuItem(“Vorlage Speichen”);
templateExport=新的JMenuItem(“Vorlage exportieren”);
templateImport=新JMenuItem(“Vorlage importieren”);
aboutInformation=新的JMenuItem(“信息”);
AboutVisitewSite=新的JMenuItem(“Webseite besuchen”);
timerSetting=新的JLabel(“以分钟为单位调整”);
可能性=新的JLabel(“Aktion wählen:”);
剩余时间=新JLabel(
“Verbleibend Zeit bis zum herunterfahren:10:23分钟”);
timeSpinner=newjspinner();
字符串[]possibleActionsData={“herunterfahren”,“abmelden”,
“东北星”、“斯佩伦”};
actionBox=新的JComboBox(可能的ActionsData);
timerButton=新的JButton(“计时器启动”);
timerButton.setSize(新尺寸(150,40));
datei.add(dateiClose);
template.add(templateSave);
template.add(templateImport);
template.add(templateExport);
about.add(aboutVisitWebsite);
about.add(aboutInformation);
菜单栏设置大小(500,5);
菜单栏。添加(日期i);
菜单栏添加(模板);
菜单栏。添加(关于);
topPanel.add(菜单栏);
setLayout(新的GridLayout(2,2,0,0));
中心面板。添加(时间设置);
添加(timeSpinner);
中心面板。添加(可能的操作);
centerPanel.add(actionBox);
setLayout(新的GridLayout(1,2,0,0));
底部面板。添加(剩余时间);
底部面板。添加(时间按钮);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(新尺寸(500250));
frame.setLocationRelativeTo(空);
框架。添加(托帕内尔);
添加框架(中心面板);
框架。添加(底部面板);
frame.setresizeable(false);
frame.setVisible(true);
}//end createBaseFrame()
}//结束类基架

导入语句和实例变量不在代码示例中。

用setSize替换setPreferredSize调用

这个组件没问题。对于其他swing组件,请尽量不要使用setSize、setPreferedSize,而是使用布局。GridBagLayout很不错


干杯

在将其显示之前,您必须调用
frame.pack()
,并使用
preferredSize
属性而不是
size
更好的方法是不要弄乱自然有一个组件的大小或首选大小。有关详细信息,请参阅。谢谢安德鲁!现在我使用DesignGridLayout API,它比swing布局管理器更舒适。我刚刚改变了整个方法。现在我使用DesignGridLayout API,它比swing布局管理器更舒适。