2016-03-15 68 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

相關問題