Java 无法将JTextField添加到JFrame
我无法将Java 无法将JTextField添加到JFrame,java,swing,jframe,jtextfield,layout-manager,Java,Swing,Jframe,Jtextfield,Layout Manager,我无法将JTextField添加到JFrame。我的JFrame包含一个JLabel和一个JTextField。 首先,我添加了JLabel,它正在工作。这是代码 private static void createandshowGUI() { JFrame frame =new JFrame("HelloSwing"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getConten
JTextField
添加到JFrame
。我的JFrame
包含一个JLabel
和一个JTextField
。
首先,我添加了JLabel
,它正在工作。这是代码
private static void createandshowGUI()
{
JFrame frame =new JFrame("HelloSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.red);
frame.setSize(200,200);
JLabel label=new JLabel("New To Java!!");
frame.getContentPane().add(label);
frame.setVisible(true);
}
public static void main(String[] args) {
createandshowGUI();} //and it shows the output like below .
然后我添加了JTextField
JLabel label=new JLabel("New To Java!!");
frame.getContentPane().add(label);
JTextField jtf=new JTextField();
frame.getContentPane().add(jtf);
frame.setVisible(true);
但它显示的输出是这样的
请有人在这个问题上帮助我。我可以在JFrame中添加多个组件吗?因为我是Java新手,我对frame、ContentPane和布局感到困惑。实际上您成功地添加了
JTextField
。您遇到的问题源于布局管理器,它将布局管理器延伸到整个框架
默认情况下,JFrame
的内容窗格使用BorderLayout
管理器。(见附件)
在我的应用程序中,a最终总是使用管理器,但首先您可能需要熟悉布局管理器。(请参见)默认情况下,您的
ContentPane
具有一个只接受单个元素(位于默认位置-中间)的属性。添加第二个元素(JTextField)后,它替换了最后一个元素(JLabel)
当您使用单个参数add
将元素添加到容器中时,您没有指定要在哪个位置添加元素,因此布局管理器会随意选择一个位置。如果指定约束(使用),则可以更好地控制元素的放置位置。检查每个布局管理器的文档,查看它们如何工作以及它支持哪些约束
对于您当前的情况,您可以使用中间版JPanel
(它的默认设置是LayoutManager
,这是对仍在学习的用户来说最简单的IMHO),而不是直接向内容窗格添加元素,或者简单地将其布局更改为其他内容。JFrame
只能有一个组件(除非您正在使用它,否则它有一个BorderLayout
)。解决方案是使用JPanel
。
将对象添加到JPanel,然后将JPanel
添加到JFrame
。还需要添加import javax.swing.JPanel;
。您可以这样做:
private static void createandshowGUI()
{
JFrame frame =new JFrame("HelloSwing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.red);
frame.setSize(200,200);
JPanel panel = new JPanel(); //Create a JPanel
JLabel label=new JLabel("New To Java!!");
panel.add(label); // Add the label to the panel
JTextField jtf = new JTextField();
panel.add(jtf); // Add the JTextField to the panel
frame.getContentPane().add(panel); // Add the panel to the JFrame
frame.setVisible(true);
}
public static void main(String[] args) {
createandshowGUI();}
这应该行得通。+1表示结构良好的问题。+1表示MigLayout-我在寻找布局好的答案时也使用了它,但对于新手来说有点太复杂了。仍然+1@Sam但丹尼尔·里考斯基的回答更有用?;-)是的,当然。这就是我接受这个答案的原因。但是边界布局有点问题,我正要问。专家组给了我即时的结果非常感谢。