【问题标题】:TextField waiting for a user inputTextField 等待用户输入
【发布时间】:2016-09-26 02:39:03
【问题描述】:

我有一个 JTextfield 和一个 GetText 方法,以及一个用于存储 Jtextfield 上记录的数字的数组。

JTextField tf1 = new JTextField();
frame.add(tf1);

String tfone = tf1.getText();
int one = Integer.parseInt(tfone);

int[][] array = new int[4][5]; 
array[0][0] = one;
array[0][1] = otherValues...

这里的问题是,代码全部执行,所以无需等待用户输入 JtextField。我怎样才能让 jtextfield 等待,直到用户登录。稍后执行 Integer.Parseint ?

我无法通过另一种方法更改 JtextField,因为我正在使用 GUI(图形用户环境)。

【问题讨论】:

  • 您的问题是,您将其编码为就好像它不是线性控制台程序一样。相反,它是一个事件驱动的 GUI,您需要了解您希望响应哪个事件,以及如何响应该事件。尝试阅读 Swing 教程以避免对此进行猜测。
  • 您可以在此处找到指向 Swing 教程和其他 Swing 资源的链接:Swing Info

标签: java multithreading swing jtextfield event-driven-design


【解决方案1】:

您可以尝试添加按钮,然后执行它的ActionListener,然后输入输入并按下按钮将加载执行您想要的东西的代码。

【讨论】:

  • 非常合适。谢谢!
【解决方案2】:

您可以使用 DocumentListener:

JTextField tf1 = new JTextField();
tf1.getDocument().addDocumentListener(DocumentListener()
    {
        @Override
        public void changedUpdate(DocumentEvent e)
        {
        }

        @Override
        public void insertUpdate(DocumentEvent e)
        {
            // parse here
        }

        @Override
        public void removeUpdate(DocumentEvent e)
        {
            // parse here
        }
    });

【讨论】:

    【解决方案3】:

    您可以使用JOptionPane 而不是JTextField 来获取用户输入。它将显示一个模态表单并等待用户验证。

    String tfone = JOptionPane.showInputDialog("Please enter a number");
    // Now test the user input
    if (tfone != null) {
        int one = Integer.parseInt(tfone);
    }
    

    这里是文档User input with JOptionPane

    【讨论】:

    • 我无法通过 OptionPane 更改文本字段,因为我正在使用 GUI。
    • 使用 JOptionPane 还会生成一个 GUI 表单,您将在其中写入您的值。先试试吧,我已经编辑了我的答案
    • OptionPane 生成图形环境,但不像 JtextField 那样。我需要和 Jtextfield 一样的正方形。使用选项窗格 a 无法生成我想要的任意数量的正方形。
    • 您是如何想到使用 JoptionPane 将 5 个 20x20 像素的正方形添加到 Jframe 中的?
    • 这正是我不想要的......因为我需要将正方形列为行和列,我可以通过实现 Jtextfield 或 JtextArea 而不是 Joptionpane 来实现。
    【解决方案4】:

    代码如下:

    JTextField tf1 = new JTextField();
    frame.add(tf1);
    
    JButton b = new JButton();
    b.setText("Solve");
    b.setBounds(30, 140, 110, 30);
    
    b.addActionListener(new ActionListener() {
    
                @Override
                public void actionPerformed(ActionEvent e) 
                {
                    String tfone = tf1.getText();
                    int one = Integer.parseInt(tfone);
    
                    int[][] array = new int[4][5]; 
                    array[0][0] = one;
                    array[0][1] = otherValues...
                 //Here you can complete the rest of functions
    

    });

    frame.add(b);
    

    一旦用户按下按钮,代码将结束其执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 2013-05-25
      • 2016-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多