【问题标题】:How to set label text to JTextField input如何将标签文本设置为 JTextField 输入
【发布时间】:2016-08-02 12:48:51
【问题描述】:

我试图让用户在 CardLayout 上的一个面板中输入一个名称,然后在它切换到的下一个面板中定义一个 JLabels 文本。我用 System.out.println(userName);仔细检查它是否正在拾取文本,它肯定是,但我不知道如何让“用户”文本成为 JTextFields 输入的文本。

完整的工作代码如下:

import java.awt.CardLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

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

public class gameDataPanel {

    private JFrame frame = new JFrame("Game Data Input");
    private JPanel mainPanel, loginPanel, gameDataPanel;
    private JLabel playerName, user;
    private JTextField playerNameInput;
    private JButton submit;
    private CardLayout gameDataLayout = new CardLayout();
    private String userName;

    public gameDataPanel() {

        mainPanel = new JPanel();

        mainPanel.setLayout(gameDataLayout);

        playerName = new JLabel("Enter Player Name: ");
        playerNameInput = new JTextField(30);
        submit = new JButton("Submit");

        loginPanel = new JPanel();
        loginPanel.add(playerName);
        loginPanel.add(playerNameInput);
        loginPanel.add(submit);

        gameDataPanel = new JPanel();
        user = new JLabel();
        user.setText(userName);
        gameDataPanel.add(user);

        mainPanel.add(loginPanel, "1");
        mainPanel.add(gameDataPanel, "2");
        gameDataLayout.show(mainPanel, "1");

        submit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
                userName = playerNameInput.getText();
                gameDataLayout.show(mainPanel, "2");
                System.out.println(userName);
            }
        });

        playerNameInput.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {

                userName = playerNameInput.getText();
                gameDataLayout.show(mainPanel, "2");
                System.out.println(userName);
            }
        });

        frame.add(mainPanel);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
    }

    public static void main(String[] args) {
        gameDataPanel gd = new gameDataPanel();
    }

}

谢谢

【问题讨论】:

    标签: swing user-interface awt jlabel cardlayout


    【解决方案1】:

    我不是 100% 确定,我是否理解正确:您想显示在​​“playerNameInput”中输入的用户名以显示在 JLabel“用户”中?在这种情况下,您必须在用户输入内容并按下按钮后更新事件侦听器中的 JLabel 对象。试试这样的:

    playerNameInput.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent event) {
    
            userName = playerNameInput.getText();
            user.setText(userName);
            gameDataLayout.show(mainPanel, "2");
            System.out.println(userName);
        }
    });
    

    我希望这会有所帮助:-)

    【讨论】:

    • 这是一个直接的修复,非常感谢。你介意解释为什么它不能在 ActionListener 之外工作吗?谢谢
    • 这是一个因果关系:您创建“gameDataPanel”类的实例,窗口出现,其构造函数被执行。此外,您的事件侦听器已注册但尚未执行。用户名字段仍为空。用户输入一些数据,按下按钮,现在事件监听器代码被执行并从文本字段中读取用户名。
    猜你喜欢
    • 2019-04-07
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多