gpt4 book ai didi

java - 显示隐藏的 JFrame

转载 作者:行者123 更新时间:2023-11-29 03:15:56 24 4
gpt4 key购买 nike

当我运行我的 JFrame 时,它以隐藏大小显示。我必须调整大小才能看到 JFrame。为什么我无法获得完整大小的 JFrame。我用过:Pack(); setVisible(true); 但它不起作用。这是我的代码:

public class Mytest extends JFrame{
JLabel label=new JLabel();
JLabel label2=new JLabel();
Timer myTimer;
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Mytest().show();

}

public Mytest(){
getContentPane().setLayout(new GridBagLayout());
setTitle("test");

GridBagConstraints gridCon=new GridBagConstraints();
gridCon.gridx=0;
gridCon.gridy=0;
getContentPane().add(label,gridCon);

gridCon.gridx=0;
gridCon.gridy=1;
getContentPane().add(label2,gridCon);

myTimer = new Timer(1000,new ActionListener(){
public void actionPerformed(ActionEvent e){
myTimerActionPerformed(e);
}
});

pack();
myTimer.start();
setLocationRelativeTo(null);

}

private void myTimerActionPerformed(ActionEvent e){
Date today=new Date();
label.setText(DateFormat.getDateInstance(DateFormat.FULL).format(today));
label2.setText(DateFormat.getTimeInstance().format(today));

}

}

最佳答案

有两个基本问题...

首先是,当您创建和添加 JLabel 时,它们没有内容,因此它们的首选大小是 0x0...

第二个是pack的使用,来自JavaDocs

Causes this Window to be sized to fit the preferred size and layouts of its subcomponents. The resulting width and height of the window are automatically enlarged if either of dimensions is less than the minimum size as specified by the previous call to the setMinimumSize method.

If the window and/or its owner are not displayable yet, both of them are made displayable before calculating the preferred size. The Window is validated after its size is being calculated.

所以,基本上,您添加了两个标签,它们的总组合大小为 0x0 并且 pack 完全按照其设计的方式进行包装框架以满足布局管理器的要求。

你需要在调用pack之前为标签的值做种,例如,添加一个更新标签的方法,例如...

public void updateLabels() {
Date today = new Date();
label.setText(DateFormat.getDateInstance(DateFormat.FULL).format(today));
label2.setText(DateFormat.getTimeInstance().format(today));
}

然后在你的构造函数中,在你调用 pack 之前,调用这个方法...

updateLabels();
pack();
myTimer.start();
setLocationRelativeTo(null);

(您还应该从 TimeractionPerformed 方法中调用此 updateLabels 方法以保持其一致性)。

这将为标签添加一些内容,pack 和布局管理器可以使用这些内容来确定窗口的大小...

Happy Window

您还应该使用 setVisible 而不是 show,因为 show 已被弃用,可能会在将来的某个时间被删除

关于java - 显示隐藏的 JFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26671319/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com