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
没有显示任何内容。我没有故意输入进口,但他们都在那里。我找不到问题。有人可以帮忙吗?
答案 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,而不是手动设置任何组件的大小。