Помещение содержимого JTextField в переменную — Java и Swing

Итак, я создаю небольшое 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 в строку Cust_Name.

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

Ваше здоровье.


person TheQuizitor    schedule 13.11.2009    source источник


Ответы (5)


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

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

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

person camickr    schedule 13.11.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();
                            }
                        });

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

person TheQuizitor    schedule 13.11.2009

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

String cust_Name = txt_cust_Name.getText();

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

person Tom Neyland    schedule 13.11.2009

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

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

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

person Carl Smotricz    schedule 13.11.2009

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

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

}

person Community    schedule 02.08.2016