单击按钮后需要读取两个JTextfield的输入

时间:2011-05-03 01:39:41

标签: java swing jtextfield

我正在开发一个程序来启动一个applet,它将演示Extended-Euclid算法的执行方式。我有两个JTextFields,这些值将被输入并需要被读取/转换为整数等。我实际上在读取输入值时遇到了麻烦。

更新了问题:
我在阅读完第一个答案后对代码进行了更改。我没有使用DocumentListener,而是按照建议在actionPerformed方法中执行所有操作,但是当我尝试测试时,我仍然遇到错误。

这是我当前的行动改编:

public void actionPerformed(ActionEvent event) {
    System.out.println(event.getActionCommand());
    String quotient = "";
    nText = nField.getText();
    mText = mField.getText();

    if("Find GCD".equals(event.getActionCommand())){
        int nInt = Integer.parseInt(nText);
        int mInt = Integer.parseInt(mText);
        int q = mInt/nInt;
        quotient = (Integer.toString(q));
    }
    else quotient = "n/a";
    //NOT the gcd, just to see if this will display
    gcd.setText(quotient);
    gcd.setEditable(false);
}

(注意:gcd是另一个JTextField,但只需要显示结果)

现在点击我的按钮后,我在控制台中打印出这些错误:

  

线程“AWT-EventQueue-1”中的异常java.lang.NullPointerException       在EuclidApplet.actionPerformed(EuclidApplet.java:87)       在javax.swing.AbstractButton.fireActionPerformed(未知来源)       at javax.swing.AbstractButton $ Handler.actionPerformed(Unknown Source)       在javax.swing.DefaultButtonModel.fireActionPerformed(未知来源)       在javax.swing.DefaultButtonModel.setPressed(未知来源)       在javax.swing.plaf.basic.BasicButtonListener.mouseReleased(未知来源)       at java.awt.Component.processMouseEvent(Unknown Source)       在javax.swing.JComponent.processMouseEvent(未知来源)       at java.awt.Component.processEvent(Unknown Source)       at java.awt.Container.processEvent(Unknown Source)       at java.awt.Component.dispatchEventImpl(Unknown Source)       at java.awt.Container.dispatchEventImpl(Unknown Source)       at java.awt.Component.dispatchEvent(Unknown Source)       at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)       at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)       at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)       at java.awt.Container.dispatchEventImpl(Unknown Source)       at java.awt.Window.dispatchEventImpl(Unknown Source)       at java.awt.Component.dispatchEvent(Unknown Source)       at java.awt.EventQueue.dispatchEventImpl(Unknown Source)       在java.awt.EventQueue.access $ 000(未知来源)       在java.awt.EventQueue $ 1.run(未知来源)       在java.awt.EventQueue $ 1.run(未知来源)       at java.security.AccessController.doPrivileged(Native Method)       at java.security.AccessControlContext $ 1.doIntersectionPrivilege(Unknown Source)       at java.security.AccessControlContext $ 1.doIntersectionPrivilege(Unknown Source)       在java.awt.EventQueue $ 2.run(未知来源)       在java.awt.EventQueue $ 2.run(未知来源)       at java.security.AccessController.doPrivileged(Native Method)       at java.security.AccessControlContext $ 1.doIntersectionPrivilege(Unknown Source)       at java.awt.EventQueue.dispatchEvent(Unknown Source)       at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)       at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)       at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)       at java.awt.EventDispatchThread.pumpEvents(Unknown Source)       at java.awt.EventDispatchThread.pumpEvents(Unknown Source)       在java.awt.EventDispatchThread.run(未知来源)

我在设置

的行收到NullPointerException
nText = nField.getText();

但我仍然不确定为什么我无法获取已插入JTextField的文本。我发现的每个例子都表明这应该有用,但我无法理解。感谢。

2 个答案:

答案 0 :(得分:1)

解决方案:不要使用DocumentListener,因为这不仅是过度杀戮,而是错误的。如果你想按下按钮的值,那么在按钮的动作中获取值,而不是从DocumentListener获取。如果你从按钮的动作监听器中获取值不起作用,那么让我们弄清楚你做错了什么并帮助你解决这个错误。

事实上,我看到你试图这样做一次,但评论出来了:

System.out.println(event.getActionCommand());
System.out.println(event.getID());
String quotient = "";
//nText = nField.getText();  // **** here ****
//mText = mField.getText();  // **** and here ****

因此取消注释这些行并删除DocumentListener。

我在下面看到的一个问题是你正在尝试使用==运算符检查字符串是否等效:

if("Find GCD" == event.getActionCommand()){
    int nInt = Integer.parseInt(nText);
    int mInt = Integer.parseInt(mText);
    int q = mInt/nInt;
    quotient = (Integer.toString(q));
}

不要这样做,因为这有时会起作用而在其他时候会失败。你真的不在乎两个字符串是否是相同的对象(这是==运算符测试),而是你想知道它们是否包含相同的字符串数据。为此,您应该使用equals或equalsIgnoreCase方法:

if ("Find GCD".equals(event.getActionCommand())) {
    int nInt = Integer.parseInt(nText);
    int mInt = Integer.parseInt(mText);
    int q = mInt/nInt;
    quotient = (Integer.toString(q));
}

答案 1 :(得分:1)

  

我在设置nText = nField.getText()的行中得到NullPointerException;

这可能是因为您将nField定义为类变量和局部变量。问题是您正在尝试引用null变量的类变量。

解决方案是摆脱类变量。