当我运行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));
}
}
答案 0 :(得分:3)
有两个基本问题......
首先,当您创建并添加JLabel
时,它们没有内容,因此其首选大小为0x0
...
第二个是使用pack
0x0
使此窗口的大小适合首选大小和布局 其子组件。窗口的最终宽度和高度是 如果任何一个尺寸小于,则自动放大 上一次调用setMinimumSize指定的最小大小 方法。
如果窗口和/或其所有者不可显示 然而,在计算之前,它们都可以显示 首选尺寸。窗口在其大小之后进行验证 计算
所以,基本上,你要添加两个标签,它们的总组合大小为pack
,而pack
正在完全按照它的设计进行,打包框架以满足布局管理器的要求。
在调用public void updateLabels() {
Date today = new Date();
label.setText(DateFormat.getDateInstance(DateFormat.FULL).format(today));
label2.setText(DateFormat.getTimeInstance().format(today));
}
之前,您需要为标签的值设定种子,例如,添加更新标签的方法,例如......
updateLabels();
pack();
myTimer.start();
setLocationRelativeTo(null);
然后在你的构造函数中,在调用pack之前,调用此方法...
updateLabels
(您还应该使用Timer
actionPerformed
方法调用此pack
方法以保持一致。
这将为标签添加一些内容,setVisible
和布局管理器可以用来确定窗口的大小......
您应该使用show
而不是show
,因为{{1}}已弃用,可能会在将来的某个时间删除
答案 1 :(得分:1)
你可以像这样最大化框架:
setExtendedState(JFrame.MAXIMIZED_BOTH);
或者您可以根据您的要求调整框架尺寸,例如
setSize(500,500);
并且您必须添加以下声明,因为我无法在您的代码中看到这一点
setVisible(true);