Java JPanel不可见

时间:2014-01-26 04:58:24

标签: java swing jframe jpanel jtextfield

我尝试使用JFrame创建简单的GUI,代码如下。

package sorting_array_gui;

package sorting_array_gui;



import java.awt.BorderLayout; 
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTable;

import javax.swing.JTextArea;

import javax.swing.JTextField;

import javax.swing.WindowConstants;

import javax.swing.table.DefaultTableModel;


public class userwindow extends JFrame {

private static final long serialVersionUID = 1L;



public userwindow() {
        super("A Programm to Sort Your Array");
        setSize(1000,600);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);

        JPanel p1= new JPanel();

        JButton b1= new JButton("Click Here");
        p1.add(b1);

        JTextField t1= new JTextField();


        p1.add(t1);
        JLabel l1= new JLabel("This is a Lable");
        p1.add(l1);



        add(p1,BorderLayout.CENTER);



}


}

当我添加JTextfield时,JPlane行为不端,甚至JButton和JLabel停止了显示。 为什么会这样。

1 个答案:

答案 0 :(得分:2)

  

"当我添加JTextfield时,JPlane行为不端,甚至JButton和JLabel停止了显示。"

我的代码无法解决此问题。但你应该注意以下内容。

  • setVisible(true);应该是添加所有组件之后 的事情。

    public userwindow() {
        super("A Programm to Sort Your Array");
        JPanel p1= new JPanel();
        JButton b1= new JButton("Click Here");
        p1.add(b1);
        JTextField t1= new JTextField();
        p1.add(t1);
        JLabel l1= new JLabel("This is a Lable");
        p1.add(l1);
        add(p1,BorderLayout.CENTER);
    
    
        pack();                                                  <--- PACK frame
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setVisible(true);                                        <--- LAST
    
    }
    
  • 此外,您应该使用设置列大小的构造函数为文本字段设置大小

    JTextField t1 = new JTextField(20);
    
  • 此外,您应该使用pack()代替setSize()。如果你只是pack(),那么所有应该是可见的,因为所有组件的首选大小都得到尊重。

  • 另请注意,如果您要向JFrame添加任何其他组件,则需要为每个组件指定BorderLayout位置,并使用没有位置被多次使用。 请参阅Laying out Components Within a Container