2016-03-15 2 views
0

У меня есть пустой JTextField, который пользователь должен изменить с помощью номера int. Однако даже после того, как JTextFiled был заполнен целым числом, когда я иду, чтобы получить String из этого 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); 

Когда я запустить программу и я нажимаю Run Боттона 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

Должен ли я использовать один из них в методе ActionPerformed JTextField? – Pino

+0

Это предложение не имеет ничего общего с методом actionPerformed(). Нет необходимости в ActionListener. Редактирование выполняется по мере ввода. Что случилось, когда вы попробовали предложение? – camickr

+0

Наконец-то я использовал DocumentListener, и он отлично работал! – Pino

Смежные вопросы