Как получить значение JTextField в java swing?

Рейтинг: 0Ответов: 1Опубликовано: 24.06.2023

Как вернуть значение от JTextField в java swing?

Сразу предупреждаю я пробовал:

String text = name.getText();

оно не работает, потому что когда я ввожу значение и нажимаю на Enter, то выводится то значение, которое вводится при создании самого виджета JTextField, но оно почему-то не работает после того как я ввел в поле символы и нажал Enter

КОД:

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;

public class Main {

    public static String SSID;
    public static Action Check = new AbstractAction()
    {
        public void actionPerformed(ActionEvent e)
        {
            System.out.println(SSID);
        }
    };

    public static void main(String[] args) {
        JFrame frame = new JFrame("Wi-Fi info");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel contentPane = new JPanel();
        JPanel panel = new JPanel();
        contentPane.setOpaque(true);
        contentPane.setBackground(Color.WHITE);
        contentPane.setLayout(null);

        JLabel lbl = new JLabel("Pls enter SSID Wi-Fi");
        lbl.setSize(300, 30);
        lbl.setLocation(80, 5);

        JTextField Text_field = new JTextField();
        Text_field.setSize(285, 30);
        Text_field.setLocation(5, 50);
        Text_field.addActionListener(Check);
        String text = Text_field.getText();
        SSID = Text_field.getText();
        System.out.println(text);

        contentPane.add(lbl);
        contentPane.add(Text_field);

        frame.setContentPane(contentPane);
        frame.setSize(310, 125);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }
}

Ответы

▲ 0Принят

Значение SSID присваивается ещё до того, как фрейм был отображён и пользователь успел что-то ввести в текстовое поле ввода.

Следует изменить определение Action, чтобы выводилось нужное значение из источника события ActionEvent::getSource, после совершения действия пользователем:

public static Action Check = new AbstractAction()
{
    public void actionPerformed(ActionEvent e)
    {
        SSID = ((JTextField) e.getSource()).getText();
        System.out.println(SSID);
    }
};