Java:JTextField不会出现

时间:2014-06-28 11:09:17

标签: java swing awt

public class HandleUI {     
    public static void setUpUI(){   
        JPanel jPan = new JPanel();
        FlowLayout flow = new FlowLayout();
        jPan.setLayout(flow);           
        txtFld = new JTextField();
        txtFld.setSize(550,5);
        jPan.add(txtFld);
        jPan.setSize(10,200);
        MainClass.mainFrame.add(jPan);
        int gapX = MainClass.mainFrame.getX()-(txtFld.getX()/2);
    }   
    //Instance variables.
    public static JTextField txtFld;
    public JButton [] buttons;
}   
public class MainClass { 
    public static void main (String [] args){           
        int frameX = Constants.FRAME_WIDTH;
        int frameY = Constants.FRAME_HEIGHT;
        mainFrame = new JFrame();
        mainFrame.setSize(frameX,frameY);
        mainFrame.setResizable(false);
        mainFrame.setVisible(true);
        HandleUI.setUpUI(); 
    }
    //Instance variables
    public static JFrame mainFrame;
}

它应该显示JTextField,但正如您可能已经猜到的那样 - JFrame没有显示任何内容。我没有故意输入进口,但他们都在那里。我找不到问题。有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

1。)只需写下:

JTextField tField = new JTextField(10);

此处在构造函数中,您传递了列数,这对于像FlowLayout这样的布局来说足以设置JTextField的大小

2。)mainFrame.setVisible(true);必须是main方法的最后一行。您需要将代码放在main()内的SwingUtilities.invokeLater(...)方法中。

3。)而不是在JFrame使用JFrame.pack()上设置尺寸,而是将窗口设置为首选尺寸。

4。)创建不必要的static成员是一个设计缺陷。试着让自己远离这些东西。

5。)请阅读Concurrency in Swing

帮助的一个示例程序(使用此答案中指定的行的顺序):

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

public class Example {

    private void displayGUI() {
        JFrame frame = new JFrame("Example Demo");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel contentPane = new JPanel();
        JTextField tField = new JTextField(10);
        contentPane.add(tField);

        frame.setContentPane(contentPane);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            @Override
            public void run() {
                new Example().displayGUI();
            }           
        };
        EventQueue.invokeLater(runnable);
    }
}

答案 1 :(得分:1)

您必须在setVisible(true) AFTER 初次化您的用户界时致电JFrame

只需提取以下内容:

HandleUI.setUpUI(); 

......就在之前:

mainFrame.setVisible(true);

......会做的。

作为旁注,我想指出设置文本字段的大小并不像你那样真正起作用。您可能会使用setPreferredSize(Dimension)代替。或者,更好的是,仅使用布局来组织您的UI,而不是手动设置任何组件的大小。