【问题标题】:Get input from JTextfield从 JTextfield 获取输入
【发布时间】:2014-08-09 00:30:09
【问题描述】:

我能够让代码做我想做的事,只是我现在无法从中获得输入。我现在要做的仍然是从 JTextfield 获取文本并将其返回到创建框架对象的主要方法。有人可以帮我从以下代码中获取输入吗?

 package assignment5;

    import java.awt.*;
    import java.awt.event.*;

    import javax.swing.*;

    public class Frame2 extends JDialog implements ActionListener 
    {

        private String a;
        private JTextField field = new JTextField(30); 

        public Frame2(JFrame parent, String title, String message) 
        {
            super(parent, title, true);

            if (parent != null) 
            {
                this.setSize(500,150);
                this.setLocation(400,200);
            }

            JPanel messagePane = new JPanel();
            messagePane.add(new JLabel(message));
            getContentPane().add(messagePane, BorderLayout.PAGE_START);

            JPanel buttonPane = new JPanel();
            JPanel button2Pane = new JPanel();

            JButton button = new JButton("OK"); 
            JButton button2 = new JButton("Cancel");

            buttonPane.add(button); 
            button2Pane.add(button2);

            getContentPane().add(buttonPane, BorderLayout.PAGE_END);
            getContentPane().add(button2Pane,BorderLayout.EAST);

            //button.addActionListener(this);
            button.addActionListener(new ActionListener()
            {
                @Override 
                public void actionPerformed( ActionEvent event)
                {
                    parent.dispose();
                }
            });

            button2.addActionListener(new ActionListener()
            {
                @Override 
                public void actionPerformed( ActionEvent event)
                {
                    parent.dispose();
                }
            });

            JPanel textPane = new JPanel();
            JTextField field = new JTextField(30); 
            textPane.add(field);
            getContentPane().add(textPane, BorderLayout.CENTER);

            field.addActionListener(this);


            setDefaultCloseOperation(DISPOSE_ON_CLOSE);

            //pack(); 
            setVisible(true);
}


        public void b ()
        {
            a = field.getText();
        }

        public String g ()
        {
            System.out.println("wasdfsdf" + a);
            return a;
        }

        @Override
        public void actionPerformed(ActionEvent event) 
        {
            a = field.getText();
            System.out.println("wasdfsdfsafddsfsdfsdfsafdsggsdfsdf" + a);
            // TODO Auto-generated method stub

        }

    }

【问题讨论】:

  • 您的问题是什么?是如何从 JTextField 中获取值?
  • 使用我编写的代码,我需要帮助从调用 MyFrame2 ojbect 的构造函数的方法中的 JTextField 获取值。我尝试制作一个 get 方法,但它不起作用。我认为的问题是程序试图在文本字段被填充之前从文本字段获取输入。
  • 奇特,我已经告诉过你如何解决这个问题了。

标签: java swing user-interface jtextfield


【解决方案1】:

当您真的想使用模态 JDialog 时,您正在创建一个非模态 JFrame。将 MyFrame2 更改为模态 JDialog,您的问题就解决了。

详细原因:

  • 当您创建并显示非模态 JFrame 时,程序流程会立即在您显示 JFrame 的代码下方的调用代码中继续。
  • 这意味着您将尝试在用户没有机会向其中添加信息之前从 JTextField 中提取数据。
  • 另一方面,如果使用模态 JDialog,当您显示 JDialog 时,调用代码中的代码流会立即停止,并且在 JDialog 不再可见之前它不会恢复。
  • 因此,在用户处理对话框之前,不会调用下面显示对话框的代码,现在希望对话框中的 JTextField 中包含有用的信息。

编辑
我很惊讶这甚至会编译:

many = Integer.parseInt()

你在这行解析什么都没有,这行不通。

您可能希望为 MyFrame2 提供一个公共方法,该方法从其 JTextField 中提取字符串,然后在显示后调用该方法。比如:

public String getMyTextFieldText() {
    return myTextField.getText();
}

然后在调用代码中:

MyFrame2 myFrame2 = new MyFrame2();
myFrame2.setVisible(true);

String text = myFrame2.getMyTextFieldText();
if (text != null && !text.trim().isEmpty()) {
  int someNumber = Integer.parseInt(text);
}

【讨论】:

  • 抱歉这行 [many = Integer.parseInt(name);] 应该是这样写的。我是 java 新手,并不真正了解很多 gui 类以及如何使用它们。我确实怀疑这就是为什么我在尝试从 Jtextfield 获取输入时遇到错误的原因。我确实尝试使用 get 函数来查看是否可以让文本返回,但它不起作用。我将如何制作我的 Jdialog 模态,因为我认为这是最好的解决方案?
  • @rominesvn:JDialog API 将向您展示可以创建模态 JDialog 的可用构造函数。我通常使用按顺序接受 JFrame(实际上是一个窗口)、一个字符串和一个 ModalityType 的构造函数。
【解决方案2】:

虽然模态确实有助于防止对话框同时出现,但这并不能解决我的问题,但我必须添加以下几行以确保它符合我的要求:

public void actionPerformed(ActionEvent event) 
    {
        setTexts(field.getText());
    }

    public String getTexts() {
        return texts;
    }

    public void setTexts(String text) {
        this.texts = text;
    }

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2011-12-13
    • 2020-02-11
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多