【问题标题】:Java JPannel not VisibleJava JPanel 不可见
【发布时间】:2014-01-26 04:58:23
【问题描述】:

我尝试使用带有以下代码的 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 停止显示。 为什么会这样。

【问题讨论】:

    标签: java swing jframe jpanel jtextfield


    【解决方案1】:

    “当我添加 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 位置,no 职位被多次使用。 见Laying out Components Within a Container

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-05
      • 2011-10-11
      • 1970-01-01
      相关资源
      最近更新 更多