显示隐藏的JFrame

时间:2014-10-31 09:31:20

标签: java swing netbeans jframe

当我运行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));

    }

}

2 个答案:

答案 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和布局管理器可以用来确定窗口的大小......

Happy Window

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

答案 1 :(得分:1)

你可以像这样最大化框架:

setExtendedState(JFrame.MAXIMIZED_BOTH); 

或者您可以根据您的要求调整框架尺寸,例如

setSize(500,500);

并且您必须添加以下声明,因为我无法在您的代码中看到这一点

setVisible(true);