【问题标题】:Simple JFrame program but can't see JTextfield简单的 JFrame 程序但看不到 JTextfield
【发布时间】:2012-12-04 22:54:35
【问题描述】:

我正在尝试自学 Swing。 我正在玩一个玩具程序,要求用户输入他们的名字。我将 JLabel 和 JTextfield 放入 JPanel 中,用户可以在其中输入他们的姓名并提交。但是我的 JTextfield 被压扁并且不可见,我无法让它显示(我试过“setSize”无济于事)。

这是我的代码:

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class NamePrompt extends JFrame{


    private static final long serialVersionUID = 1L;

    String name;

    public NamePrompt(){

        setLayout(new BorderLayout());

        JLabel enterYourName = new JLabel("Enter Your Name Here:");
        JTextField textBoxToEnterName = new JTextField();
        textBoxToEnterName.setSize(40, 10);
        JPanel panelTop = new JPanel();
        panelTop.add(enterYourName);
        panelTop.add(textBoxToEnterName);

        JButton submit = new JButton("Submit");
        submit.addActionListener(new SubmitButton());
        JPanel panelBottom = new JPanel();
        panelBottom.add(submit);

        //Add panelTop to JFrame
        add(panelTop, BorderLayout.NORTH);
        add(panelBottom, BorderLayout.SOUTH);

        //JFrame set-up
        setTitle("Name Prompt Program");
        setSize(300, 150);
        setLocationRelativeTo(null);


    }



    public static void main(String[] args) {
        NamePrompt promptForName = new NamePrompt();
        promptForName.setVisible(true);


    }

【问题讨论】:

  • textBoxToEnterName.setSize(40, 10);this thread

标签: java swing jframe jpanel jtextfield


【解决方案1】:
JTextField textBoxToEnterName = new JTextField(20);

请参阅new JTextField(columns) 了解说明。例如

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

public class NamePrompt extends JFrame{

    private static final long serialVersionUID = 1L;

    String name;

    public NamePrompt(){

        setLayout(new BorderLayout());

        JLabel enterYourName = new JLabel("Enter Your Name Here:");
        JTextField textBoxToEnterName = new JTextField(21);
        //textBoxToEnterName.setSize(40, 10);
        JPanel panelTop = new JPanel();
        panelTop.add(enterYourName);
        panelTop.add(textBoxToEnterName);

        JButton submit = new JButton("Submit");
        //submit.addActionListener(new SubmitButton());
        JPanel panelBottom = new JPanel();
        panelBottom.add(submit);

        //Add panelTop to JFrame
        add(panelTop, BorderLayout.NORTH);
        add(panelBottom, BorderLayout.SOUTH);

        //JFrame set-up
        setTitle("Name Prompt Program");
        //setSize(300, 150);
        pack();
        setLocationRelativeTo(null);
    }

    public static void main(String[] args) {
        NamePrompt promptForName = new NamePrompt();
        promptForName.setVisible(true);
    }
}

【讨论】:

  • 现在我得到了一条更长但非常细的线(我可以看到我正在输入的文本顶部的一点点)
  • 不要打电话给setSize()(代码中的任何地方)!查看更新。
  • 有效!你能解释一下为什么不调用 setSize() 吗?还有,如何将文本框移动到文本下方?
  • 我对这个问题发表了评论,链接到thread where the Gurus provide the details。在这种情况下,如果 UI 需要更多的“空白空间”(例如,对话框更高的高度),在某些情况下可以通过使用布局填充(通常在构造函数中声明)或应用于相关面板的 EmptyBorder 来实现。
  • 如果您真的是 GUI 编程新手,请查看 Java 文档,因为它们为 Swing 组件的不同方法提供了非常好的信息。
猜你喜欢
  • 1970-01-01
  • 2013-09-29
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 2014-09-26
  • 1970-01-01
  • 2011-12-01
  • 2021-08-15
相关资源
最近更新 更多