重绘我的JFrame

时间:2014-04-26 13:20:22

标签: java swing

我有一个问题。将几个对象添加到我的JFrame后,当我执行应用程序时,我需要调整表单的尺寸以便查看所有内容。我做了一些研究,我已经明白我需要在某处插入这行代码(但我不知道在哪里!!)

revalidate(); 

OR

repaint();

我已经尝试过将这些添加到任何地方,但我得到语法错误....帮助?

package test_area;

import javax.swing.BoxLayout;
import javax.swing.*;
import java.awt.*;


public class Test_area {

   // private JFrame f;
   // private JPanel p;
    //private JButton b1;
    private JLabel lab;

    final static boolean shouldFill = true;
    final static boolean shouldWeightX = true;

    public Test_area()
    {
        gui();

    }


    public void gui()
    {

      JFrame  f = new JFrame("Ma JFrame");
        f.setVisible(true);
        f.setSize(600,400);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel p = new JPanel(new GridBagLayout());
        p.setBackground(Color.CYAN);
        //p.setSize(450,250);

       JButton b1 = new JButton("Login");
       JButton b2 = new JButton("Exit_ ");
       JLabel l1 = new JLabel("Username");
       JLabel l2 = new JLabel("Password");
       JLabel validate = new JLabel("Not Validated Yet");
       TextField textField = new TextField(20);
       JPasswordField pwField = new JPasswordField(15);


        GridBagConstraints c = new GridBagConstraints();

        c.insets = new Insets(5,5,5,5);

        c.gridx=0;
        c.gridy=1;

        p.add(l1,c);

        c.gridx = 1;
        c.gridy = 1;
        p.add(textField,c);

        c.gridx = 0;
        c.gridy = 2;
        p.add(l2,c);

        c.gridx= 1;
        c.gridy=2;
        p.add(pwField,c);

        c.gridx=2;
        c.gridy=1;
        p.add(b1,c);


        c.gridx=2;
        c.gridy=2;

        p.add(b2,c);


        c.gridx=3;
        c.gridy=1;
        p.add(validate,c);

        f.add(p,BorderLayout.NORTH);



//        JButton button;
//        JPanel p = new JPanel();
//        p.setLayout(new GridBagLayout());
//        GridBagConstraints c = new GridBagConstraints();
//        
//        if(shouldFill)
//        {
//         c.fill = GridBagConstraints.HORIZONTAL;
//        }
//        
//        button = new JButton("Button1");
//        
//        if(shouldWeightX)
//        {
//            c.weightx = 0.5;
//        }
//        





    }


    public static void main(String[] args) {

       new Test_area();


    }

}

2 个答案:

答案 0 :(得分:2)

使用您的代码,我找不到任何语法错误(代码编译)。您应该使用pack来为JFrame使用最小大小。只需在添加完所有组件后添加f.pack();即可。

答案 1 :(得分:1)

正如用户3575404所述,是的,请致电pack(),但最重要的是,在 将所有组件添加到GUI后,请致电setVisible(true) 。你现在首先调用它,所以发生了什么 - 画了GUI,然后你添加了看不见的组件,所以结果不应该让你感到惊讶。