2016-08-02 67 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」類的實例,窗口顯示出來,它的構造函數被執行。此外,您的事件偵聽器已註冊但尚未執行。用戶名字段仍爲空。用戶輸入一些數據,按下按鈕,現在執行事件監聽器代碼,並從文本字段中讀取用戶名。 –

相關問題