2016-03-15 65 views
0

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

//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? 非常感谢。

+0

KeyListener不是你想要的。使用一个ActionListener。教程:https://docs.oracle.com/javase/tutorial/uiswing/components/button.html – markspace

+0

@Pino任何你没有导入类似'java.awt','javax.swing'的包的原因?你的代码有点难以阅读。 – user3437460

回答

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(); 
         } 
        }); 
       } 
     } 

希望这对别人有用。

3

你有你的tMax字段定义两次。一次作为一个实例变量,一次作为局部变量。

摆脱局部变量:

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

甚至一度JTextFiled已经充满了一个整数,

不要使用KeyListener的,因为它是编辑的文本类型。相反,你应该使用:

  1. 一个DocumentFilter
  2. 一个JFormattedTextField
  3. 一个JSpinner
+0

我应该在JTextField的ActionPerformed方法中使用其中之一吗? – Pino

+0

这个建议与actionPerformed()方法无关。没有必要使用ActionListener。编辑完成时,你键入。当你尝试这个建议时发生了什么? – camickr

+0

最后我用了一个DocumentListener,它效果很好! – Pino

相关问题