2014-06-28 57 views
2
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什么也没有显示。我没有故意输入进口货,但他们都在那里。我找不到问题。谁能帮忙?Java:JTextField不会出现

回答

2

1)简单地写:

JTextField tField = new JTextField(10); 

在这里要传递的列数的构造,这足够满足FlowLayout布局设置的JTextField

大小2.)mainFrame.setVisible(true);必须是主方法的最后一行。你需要把代码放在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); 
    } 
} 
+0

写它而不是行:txtFld = new JTextField(); ? – user3754221

+0

@ user3754221:调用空的构造函数,为'FlowLayout'将创建一个非常小的'JTextField'我猜,此外,'frame.setVisible(true)'应该是最后一行,前面加上'frame.pack()' –

1

你必须调用setVisible(true)JFrameAFTER已初始化您的用户界面。

简单地拉动下面一行:

HandleUI.setUpUI(); 

...权之前:

mainFrame.setVisible(true); 

...会做的伎俩。

作为一个方面说明,我想指出的是,设置文本字段的大小并不会像你那样工作。您可能会使用setPreferredSize(Dimension)。或者,甚至更好的是,只使用布局来组织UI,而不是手动设置任何组件的大小。

+0

所以基本上setVisible()方法必须是最后一个对JPanel做些什么的? – user3754221