2016-04-05 4 views
0

У меня есть графический интерфейс пользователя, который имеет TextField, мой код выглядит следующим образом:Подождите ввод TextField, прежде чем продолжить с кодом

int port = 0; 
    try{ 
    port = Integer.parseInt(frame.textfieldInput.getText()); 
    } 
    catch(NumberFormatException npe) 
    { 
     System.out.println("Error! parse exception"); 
    } 

    System.out.println("The Port is " + port); //is 0 

Я должен присвоить значение «0» в порт, так как иначе код не будет компилироваться, потому что переменная не будет инициализирована.

Поскольку TextField пуст в начале Программы, getText() не получит значение, поэтому порт остается «0».

Есть ли способ дождаться ввода до того, как код будет продолжен?

+1

Вы можете поместить код в качестве слушателя, который действует на изменения в текстовое поле или на нажатия кнопок и т.д. В качестве альтернативы вызвать модальный диалог ('JOptionPane'). – Thomas

ответ

0

Найдено решение, это то, как я ее решил:

Я создал глобальную переменную вне моего ActionListener:

public String value = ""; 
public void createInput() { 
    buttonInput.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      value = textfieldInput.getText(); 

     } 

    }); 
} 

под названием 'значение'.

в моем public static void main(String[] args) я заявил следующее:

while(frame.value.equalsIgnoreCase("")) 
{ 
    try 
    { 
     System.out.println("waiting..."); 
     Thread.sleep(1000); 
    } 
    catch(InterruptedException ie) 
    { 
    System.out.println("interrupted"); 
    } 
} 

Я просто должен очистить каждый раз переменной «значения» Я использовал его, так что он снова пуст для будущего использования.

Я не лучший способ решить эту проблему, но это сработало для меня.

0

Ниже приведен код, который может дать вам некоторое представление о более эффективном способе получения значения потерянного фокуса.

JFrame frame = new JFrame(); 
frame.setSize(50, 50); 
TextField field = new TextField(); 
field.addFocusListener(new FocusListener() { 

    @Override 
    public void focusLost(FocusEvent e) { 
     // continue from here 
     System.out.println(field.getText()); 
    } 

    @Override 
    public void focusGained(FocusEvent e) { 
     // TODO Auto-generated method stub 

    } 
}); 
frame.getContentPane().add(field); 
frame.setVisible(true); 
Смежные вопросы