2016-08-02 7 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"클래스의 인스턴스를 생성하면 윈도우가 나타나고 생성자가 실행됩니다. 또한 이벤트 리스너가 등록되었지만 아직 실행되지 않았습니다. 사용자 이름 필드는 여전히 비어 있습니다. 사용자가 일부 데이터를 입력하고 버튼을 누르면 이벤트 리스너 코드가 실행되고 텍스트 필드에서 사용자 이름을 읽습니다. –