2016-08-02 65 views
0

我想让用户在CardLayout上的一个面板中输入名称,然后在下一个面板中定义JLabels文本。我使用System.out.println(userName);要仔细检查它是否正在拾取文本,它肯定是,但我不知道如何让'用户'文本是JTextFields输入的文本。如何将标签文本设置为JTextField输入

低于全部工作代码:

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

} 

感谢

回答

2

我不是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); 
    } 
}); 

我希望这有助于:-)

+0

这是一个直线上升的修复,非常感谢你。你介意解释为什么它不能在ActionListener之外工作吗?谢谢 – SkyPlus

+0

这是一个因果关系:你创建了一个“gameDataPanel”类的实例,窗口显示出来,它的构造函数被执行。此外,您的事件侦听器已注册但尚未执行。用户名字段仍为空。用户输入一些数据,按下按钮,现在执行事件监听器代码,并从文本字段中读取用户名。 –

相关问题