我有一个问题。将几个对象添加到我的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();
}
}
答案 0 :(得分:2)
使用您的代码,我找不到任何语法错误(代码编译)。您应该使用pack来为JFrame使用最小大小。只需在添加完所有组件后添加f.pack();
即可。
答案 1 :(得分:1)
正如用户3575404所述,是的,请致电pack()
,但最重要的是,在 将所有组件添加到GUI后,请致电setVisible(true)
。你现在首先调用它,所以发生了什么 - 画了GUI,然后你添加了看不见的组件,所以结果不应该让你感到惊讶。