如何在用户修改后获取JTextField的值[java]

时间:2016-03-15 16:33:15

标签: java swing jtextfield netbeans-7

我有一个空的JTextField,用户应该用int号修改它。但是,即使JTextFiled填充了整数,当我从JTextField获取String时,字符串结果为“”( - >空)。 我怎样才能保存Field的新值?我该怎么办? 这是问题所在:

//Class where JTextField is initialized: 

 javax.swing.JTextField tMax = new javax.swing.JTextField();
 tMax.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyTyped(java.awt.event.KeyEvent evt) {
                tMaxKeyTyped(evt);
            }
        });
private void tMaxKeyTyped(java.awt.event.KeyEvent evt) {                                   
// TODO add your handling code here:
    char c = evt.getKeyChar();
    if(!(Character.isDigit(c) || (c == KeyEvent.VK_BACK_SPACE) || c == KeyEvent.VK_DELETE)) {
        getToolkit().beep();
        evt.consume();
    }
}
public String getTMax() {
    String tMaxString = tMax.getText();
    return tMaxString;
}


//Class where tMax should be used

    //code
   private void runBtnActionPerformed(java.awt.event.ActionEvent evt) {
   Panel class1 = new Panel();
   String tMaxString = class1.getTMax();
   System.out.println(tMaxString);

当我运行程序时,我点击了运行按钮Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""

如何保存修改后的JTextField? 非常感谢你。

2 个答案:

答案 0 :(得分:3)

您的tMax字段定义了两次。一次作为实例变量,一次作为局部变量。

摆脱局部变量:

//javax.swing.JTextField tMax = new javax.swing.JTextField();
tMax = new javax.swing.JTextField();
  

甚至一旦JTextFiled填充了整数,

在键入文本时,不要使用KeyListener编辑文本。相反,你应该使用:

  1. a DocumentFilter
  2. a JFormattedTextField
  3. a JSpinner

答案 1 :(得分:1)

最后,我使用DocumentListener管理了这个问题。这是解决方案:

package AppPackage;


import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

        public class Test {
            JFrame frame = new JFrame("Test");
            JPanel panel = new JPanel();
            JTextField option = new JTextField("HI", 10);
            static String optionString;

            public Test() {
               option.getDocument().addDocumentListener(new DocumentListener() {

                    @Override
                    public void insertUpdate(DocumentEvent e) {
                        warn();
                    }

                    @Override
                    public void removeUpdate(DocumentEvent e) {
                        warn();
                    }

                    @Override
                    public void changedUpdate(DocumentEvent e) {
                        warn();
                    }

                    public void warn() {
                        optionString = option.getText();
                        System.out.println(optionString);
                    }
                });
                panel.add(option);
                frame.add(panel);
                frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                frame.pack();
                frame.setVisible(true);
            }

              public static void main(String[] args) {
                    SwingUtilities.invokeLater(new Runnable() {
                         public void run() {
                             new Test();
                         }
                    });
              }
      }

希望这对某人有用。