【问题标题】:How to display a textfield's text from a class into another class' label如何将文本字段的文本从一个类显示到另一个类的标签中
【发布时间】:2016-05-13 03:48:51
【问题描述】:

我需要有关如何从一个类中获取文本字段的文本并将其显示到来自另一个类的标签中的帮助。

我只展示了 2 个类,更容易看到/阅读我想要询问的内容。

GameView.java

public void logIn()
    {
       loginFrame = new JFrame("FIshing Pair Game");
       loginFrame.setDefaultCloseOperation(EXIT_ON_CLOSE);
       loginFrame.setResizable(true);

       gridBag = new GridBagLayout();

       loginPanel = new JPanel();
       loginPanel.setBackground(Color.LIGHT_GRAY);
       loginPanel.setPreferredSize(new Dimension(400,400));
       loginPanel.setLayout(gridBag);

       loginTitleLbl = new JLabel("Login to Play!");
       loginTitleLbl.setFont(new Font("Britannic Bold",Font.PLAIN,22));

       nameLbl = new JLabel("Login name:");
       nameLbl.setFont(new Font("Agency FB",Font.BOLD,20));

       passLbl = new JLabel("Password:");
       passLbl.setFont(new Font("Agency FB",Font.BOLD,20));

       nameTxt = new JTextField();
       nameTxt.setPreferredSize(new Dimension(200,30));

       passTxt = new JPasswordField();
       passTxt.setPreferredSize(new Dimension(200,30));
       passTxt.setEchoChar('*');

       private class LoginBtnListener implements ActionListener
{
   public void actionPerformed(ActionEvent ae)
   {
       ArrayList<Player>players = new ArrayList<>();
       Scanner playerScan = null;

        try{
            playerScan = new Scanner(new File("players.dat"));
            while(playerScan.hasNextLine())
            {
                String playerData = playerScan.nextLine();
                String[] dataSplit = playerData.split("\\|");
                Player existingPlayer = new Player(dataSplit[0],dataSplit[1],dataSplit[2],Integer.parseInt(dataSplit[3]));
                players.add(existingPlayer);
            }
        }catch(FileNotFoundException ex){
            System.out.println("Error! File - players.dat not found!");
        }
        playerScan.close();

        boolean exist = false;

        String name = nameTxt.getText();
        String passWord = passTxt.getText();

        for(int i = 0; i < players.size(); i++)
        {
            if(players.get(i).getLoginName().equalsIgnoreCase(name))
            {
                exist = true;
            }
        }

        if(exist == true)
        {
            nameTxt.setText("");
            passTxt.setText("");
            JOptionPane.showMessageDialog(null,"Welcome back " + name + "!");
            javax.swing.UIManager.put("OptionPane.messageFont", new FontUIResource(new Font("Verdana", Font.ITALIC, 20))); 
            ShuffleCardsFrame fishingFrame = new ShuffleCardsFrame();
            fishingFrame.run();
            loginFrame.setVisible(false);
        }

        if(exist == false)
        {
            JOptionPane.showMessageDialog(null,"Error! Player " + name + " doesn't exist! Please try again.");
            javax.swing.UIManager.put("JOptionPane.messageFont", new FontUIResource(new Font("Baskerville Old Face", Font.BOLD, 20))); 
        }
   }

}

我需要从 nametxt TextField 中获取 名称 并将其显示到这个 FishingPairFrame.java 中的标签

文本字段中的名称基于文本文件和 ArrayList。

FishingPairFrame.java

playerLbl = new JLabel("");

playerLbl.setFont(new Font("Agency FB",Font.BOLD,20));

更新代码

FishingPairFrame

playerName = gameView.getPlayerName();
playerLbl = new JLabel(playerName+" Matching Pair: 0");
playerLbl.setFont(new Font("Agency FB",Font.BOLD,20));

GameView.java

public String getPlayerName()
{
   return playerName;
}

public void setPlayerName(String playerName)
{
   this.playerName = playerName;
}
//in private loginbtnlistener class
playerName = nameTxt.getText();

【问题讨论】:

    标签: java user-interface jlabel jtextfield


    【解决方案1】:
    1. 在 GameView.java 中创建一个返回字符串的公共方法:

      private String name;
      
      public String getName() {
          return name;
      }
      
    2. 当文本字段被填充时,在 GameView 中设置新变量“名称”。

    你可以做这个

        String name = nameTxt.getText(); 
    

    进入这个:

        name = nameTxt.getText(); )
    
    1. 在 FishingPairFrame.java 中,调用:

      GameView gameView = new GameView();
      String name = gameView.getName();
      

    如果您在 FishingPairFrame 中没有 GameView 类的实例,则创建方法 static

    这种技术称为封装(您可以使用 getter 和 setter 访问私有变量。阅读它,它非常有用。

    【讨论】:

    • 我试过了,它显示的是 null 而不是玩家的名字。我将粘贴我更新的代码
    • 它在 gui 屏幕中显示为“null Matching Pair: 0”
    • @hello 我认为 RandyFreak 第 2 点指的是在方法 LoginBtnListener.actionPerformed 而不是 GameView.login 中进行更改。
    • @RubioRic 是的,我确实这样做了。但还是不行..>.<.>
    【解决方案2】:

    您可以尝试属性更改侦听器。如果您的 Java 对象类实现了属性更改侦听器,如果 GUI 上的任何值发生更改,它将触发属性更改侦听器并自动更新值。但是您需要编写一个刷新方法来重置该标签的值。

    【讨论】:

      猜你喜欢
      • 2020-08-19
      • 1970-01-01
      • 2020-03-14
      • 2019-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-10
      相关资源
      最近更新 更多