【问题标题】:How to get string from JTextField and save it in variable?如何从 JTextField 获取字符串并将其保存在变量中?
【发布时间】:2016-08-24 11:42:36
【问题描述】:

我正在制作一个简单的儿童游戏,它会要求用户在JTextField 中输入他/她的名字,并且该名字将在游戏结束后显示在其他类中。

我创建了一个新对象并用它来调用方法getName,但是当我调用该方法时它返回null

我希望它返回用户输入的名称。

这是代码:

package learn_englishTest;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.Icon;
import javax.swing.ImageIcon;

public class Home extends JFrame{
    JTextArea welcome_txt,userName_txt;
    JTextField user_name;
    JLabel Background_lbl;
    JButton exit_btn,start_btn;
    JPanel panel;
    Icon Background_icon;
    String name;
    Font userName_font,welcome_font;

    public Home(){
        super("Easy Fun Learning");
        Container c =getContentPane();

        c.setLayout(new BorderLayout());

        panel =new JPanel(null);
        panel.setPreferredSize(new Dimension(650,470));
        
        welcome_txt=new JTextArea("Welcom to Easy Fun Learning ");
        welcome_txt.setEditable(false);
        
         welcome_font = new Font("Verdana", Font.BOLD, 30);
         welcome_txt.setFont(welcome_font);
         welcome_txt.setForeground(Color.pink);
         welcome_txt.setBounds(80, 60, 500, 50);

        userName_font=new Font("Verdana",Font.BOLD,20);
        userName_txt=new JTextArea("Enter Your Name");
        userName_txt.setEditable(false);
        userName_txt.setFont(userName_font);
        userName_txt.setForeground(Color.BLUE);
        userName_txt.setBounds(350, 200, 200, 40);
        
        user_name=new JTextField(10);
        user_name.setBounds(400, 240, 100, 30);

        start_btn=new JButton("Start");
        start_btn.setBounds(480, 360, 100, 20);
        
        exit_btn=new JButton("Exit");
        exit_btn.setBounds(480, 390, 100, 20);
        
        Background_icon=new ImageIcon(getClass().getResource("art.png"));
        Background_lbl=new JLabel(Background_icon);
        Background_lbl.setBounds(0, 80, 450, 450);
        
        panel.add(welcome_txt);
        panel.add(userName_txt);
        panel.add(user_name);
        panel.add(exit_btn);
        panel.add(start_btn);
        panel.add(Background_lbl);

        panel.setBackground(Color.WHITE);

    c.add(panel,BorderLayout.BEFORE_FIRST_LINE);
        
        ButtonHandler handler=new ButtonHandler();
        
        exit_btn.addActionListener(handler);
        start_btn.addActionListener(handler);
    }

    private class ButtonHandler implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
             if(e.getSource()==exit_btn)
                System.exit(0);
             if(e.getSource()==start_btn){
                 name=user_name.getText();
             
             List list=new List();
             list.setSize(700, 700);
             list.setVisible(true);
             list.setDefaultCloseOperation(EXIT_ON_CLOSE);
             Home.this.setVisible(false);
            }
        }
        }

    @Override
     public String getName(){
                  return name;
            }     
}

【问题讨论】:

  • 是的,它没有用
  • 使用String var = textField.getText().toString();
  • 你能告诉我们你在哪里/如何打电话给getName()吗?
  • Home h=new Home();JOptionPane.showMessageDialog(null,""+h.getName()+"你的分数:"+score);
  • 调用有误?!

标签: java swing jtextfield


【解决方案1】:

尝试类似:

JTextArea userName_txt = new JTextArea("Enter Your Name");
userName_txt.getDocument().addDocumentListener(new DocumentListener() {
    @Override
    public void removeUpdate(final DocumentEvent paramDocumentEvent) {
        name = userName_txt.getText();
    }

    @Override
    public void insertUpdate(final DocumentEvent paramDocumentEvent) {
        name = userName_txt.getText();
    }

    @Override
    public void changedUpdate(final DocumentEvent paramDocumentEvent) {
        name = userName_txt.getText();
    }
});

或将 getName() 重写为:

public String getName() {
    return userName_txt.getText();
} 

但是您基本上在代码中覆盖了Component.getName(),这根本没有意义,最好将您的方法重命名为 getUsername()。

【讨论】:

  • 我应该在哪里写这些方法?
  • 在 "userName_txt=new JTextArea("Enter Your Name");" 之后添加 DocumentListener行,你就完成了:)
  • 别开枪 :) 但仍然返回 null
  • hehe :P 最好将 getName() 重命名为 getUserName() 并删除“@Override”,还要确保 JTextArea 已填充。
  • 它让我发疯我试过了,但仍然显示为空
【解决方案2】:

您忘记添加 ActionListener。

user_name.addActionListener(handler);

我强烈建议你也关注Java naming conventions

所以user_name 应该是userName

【讨论】:

    【解决方案3】:

    要从 JTextField 中获取字符串,您只需要以下内容:

    String var = jTextFieldName.getText();
    

    这会将 JTextField 中的任何内容保存到 var 变量中。

    getText() 只是属于 JTextField 类的一个方法,它返回其中的任何文本。

    【讨论】:

    • 是的,我在 ActionListener 方法中写了这个,但仍然无法正常工作
    猜你喜欢
    • 2021-04-19
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2016-05-09
    • 2013-08-23
    • 2015-12-17
    • 2022-11-02
    相关资源
    最近更新 更多