2016-08-02 8 views
0

私は、CardLayoutの1つのパネルに名前を入力し、その入力が次に切り替わる次のパネルでJLabelsテキストを定義するようにしようとしています。私はSystem.out.println(userName)を使用しました。それがテキストをピックアップしていることを再確認してください。それは間違いありませんが、JTextFieldsの入力であるように 'user'テキストを取得する方法はわかりません。以下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オブジェクトを更新する必要があります。私は、これはこれは、まっすぐに修正した:-)

+0

役に立てば幸い

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

、どうもありがとうございました。このような何かを試してみてください。それがActionListenerの外で動作しない理由を説明してもらえますか?おかげで – SkyPlus

+0

それは因果関係の問題です: "gameDataPanel"クラスのインスタンスを作成すると、ウィンドウが現れ、そのコンストラクタが実行されます。さらに、イベントリスナーは登録されていますが、まだ実行されていません。ユーザー名フィールドはまだ空です。ユーザーが何らかのデータを入力してボタンを押すと、イベントリスナーコードが実行され、テキストフィールドからユーザー名が読み取られます。 –

関連する問題