Помещение содержимого JTextField в переменную - Java & Swing - PullRequest
1 голос
/ 13 ноября 2009

Итак, я создал небольшое приложение на Java и просто удивляюсь, как я могу получить содержимое JTextField и затем присвоить значение переменной String. Я думал, что ниже будет работать:

JTextField txt_cust_Name = new JTextField();
String cust_Name;
txt_cust_Name.addActionListener(new ActionListener() 
{
    public void actionPerformed(ActionEvent e) 
    {
         cust_Name = txt_cust_Name.getText();
    }
});

Теперь я подумал, что это отправит значение JtextField в String Cust_Name.

У кого-нибудь есть идеи сделать это?

Приветствие.

Ответы [ 5 ]

3 голосов
/ 13 ноября 2009

ActionListener запускается только при нажатии клавиши Enter.

Возможно, вам следует использовать FocusListener и обработать событие focusLost ().

Или вы также можете добавить DocumentListener к документу текстового поля. DocumentEvent запускается каждый раз, когда в текстовое поле вносятся изменения.

2 голосов
/ 13 ноября 2009

Спасибо всем, что я решил сделать, это назначить значения при нажатии кнопки:

JButton btn_cust_Save = new JButton("Save Customer");
                       btn_cust_Save.addActionListener(new ActionListener()
                       {
                            public void actionPerformed(ActionEvent ae)
                            {
                                final String cust_Name = txt_cust_Name.getText();
                                final String cust_Door = txt_cust_Door.getText();
                                final String cust_Street1 = txt_cust_Street1.getText();
                                final String cust_Street2 = txt_cust_Street2.getText();
                                final String cust_City = txt_cust_City.getText();
                                final String cust_PCode = txt_cust_PCode.getText();
                                final String cust_Phone = txt_cust_Phone.getText();
                                final String cust_Email = txt_cust_Email.getText();
                            }
                        });

Спасибо за помощь.

1 голос
/ 13 ноября 2009

Где бы вам ни понадобилось использовать строковую переменную, вы можете просто сказать:

String cust_Name = txt_cust_Name.getText();

Предполагается, что в тот момент, когда вы пытаетесь получить доступ к этому значению, оно уже было введено ... (В отличие от попытки обновлять переменную при каждом нажатии клавиши)

0 голосов
/ 02 августа 2016

Я обнаружил, что этот код работает довольно хорошо:

package test;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Test extends JFrame {

private static final long serialVersionUID = -5624404136485946868L;

String userWord = "";
JTextField userInput;

public Test() {
    JFrame jf = new JFrame();
    JPanel panel = new JPanel();
    JLabel jl = new JLabel("Test");
    JButton jButton = new JButton("Click");
    userInput = new JTextField("", 30);
    jButton.addActionListener( (e) -> {
        submitAction();
    });
    jf.setSize(500, 500);
    jf.setVisible(true);
    jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    jf.add(panel);
    panel.add(jl);
    panel.add(userInput);
    panel.add(jButton);
}

private void submitAction() {
    userWord = userInput.getText();
    System.out.println(userWord);//do whatever you want with the variable, I just printed it to the console
}

public static void main(String[] args) {
    new Test();
}

}

0 голосов
/ 13 ноября 2009

Обычно JTextField находится в форме, и пользователь может играть с ним, пока не нажмет кнопку Ok в форме. Затем обработчик для этой кнопки (ActionListener) извлекает текущее текстовое значение из поля и что-то с ним делает.

Хочешь сделать что-то совершенно другое? Вам нужно реагировать на ввод по мере его изменения или только когда пользователь покидает поле? Или важно, чтобы он нажал ENTER?

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

...