Java 将从JButton获得的值传递给变量

Java 将从JButton获得的值传递给变量,java,swing,awt,Java,Swing,Awt,所以我的问题是,我在java swing中制作了一个非常简单的数字猜测游戏,我添加了一个JButton和一个JTextField,我想点击按钮获取写入文本字段的值,然后将其传递给执行操作的do while循环,然后在一个JLabel中显示它,但我不知道怎么做。我没有JFrame,因为我要将这个类发送到具有JFrame的类,所以我要将所有内容添加到JPanel。 希望我是清楚的,会感谢一些帮助 代码: import java.util.Random; 导入java.util.Scanner; 导入

所以我的问题是,我在java swing中制作了一个非常简单的数字猜测游戏,我添加了一个JButton和一个JTextField,我想点击按钮获取写入文本字段的值,然后将其传递给执行操作的do while循环,然后在一个JLabel中显示它,但我不知道怎么做。我没有JFrame,因为我要将这个类发送到具有JFrame的类,所以我要将所有内容添加到JPanel。 希望我是清楚的,会感谢一些帮助

代码:

import java.util.Random;
导入java.util.Scanner;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
公共类GameDat扩展了JPanel{
JPanel面板=新的JPanel();
FlowLayout=新的FlowLayout();
随机=新随机();
按回车键;
JTextField显示;
JLabel结果;
int MIN=1;
int MAX=50;
int compare=random.nextInt(最大-最小+1)+MIN;
国际球员;
int=0;
公共游戏(){
enter=newjbutton(“选择一个数字:”);
面板设置尺寸(300300);
面板设置布局(布局);
面板。添加(输入);
面板。添加(显示);
添加(结果);
enter.addActionListener(新的CustomActionListenerEnter());
做{
//这里应该是从JTextField而不是scanner捕获的值
player=输入nextInt();
猜猜看++;
如果(玩家>比较)
//此文本应转到jlabel,而不是打印它
System.out.println(“数量小于”+玩家);
否则如果(玩家<比较)
//此文本应转到jlabel,而不是打印它
System.out.println(“数字大于”+玩家);
其他的
//此文本应转到jlabel,而不是打印它
System.out.println(compare+“是我的号码,你用了”+猜它+“猜”);
}while(player!=比较);
}
类CustomActionListenerEnter实现ActionListener{
已执行的公共无效操作(操作事件e){
//我想把这个值传递给我的do。
display.getText();
}
}
}

我的主要建议是:摆脱while循环。此循环与线性控制台类型的程序一起工作,但事件驱动GUI的工作方式并非如此,而且该循环将绑定Swing事件线程,使GUI冻结且无用。所以,再次摆脱该循环,而是根据用户的响应更改该类中变量的状态,并基于该状态创建行为。因此,在ActionListener中,从JTextField中获取文本,通过解析将其转换为int,检查猜测是否正确,并将猜测结果通知用户

其他问题:

  • 您知道上面的类创建了两个JPanel,一个是类本身的实例,您不向其添加任何内容,另一个是由
    面板
    变量引用的,您向其添加组件。如果您只打算使用面板变量JPanel,那么该类可能不应该扩展JPanel
  • 这是怎么回事
    //这里应该是从JTextField捕获的值,而不是扫描仪
    player=input nextInt()?摆脱这些非编译代码和无用代码,使用JTextField。看起来您正试图将horn控制台代码导入GUI,但这行不通
  • 不要将
    System.out.println(…)
    或类似代码用于用户交互,但仅用于临时调试(如果需要)。所有用户交互都应该通过GUI本身进行,最终的生产代码不应该有println

结果是这样的,效果很好。谢谢

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    player = Integer.parseInt(jTextField3.getText());
    guessIt++;

        if (player > compare)
           jTextField1.setText("Number is less than " + player);

        else if (player < compare)
            jTextField1.setText("Number is greater than " + player);

        else 
          jTextField1.setText(compare + " was my number, it took you " +
          guessIt + " guesses.");


      }
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
player=Integer.parseInt(jTextField3.getText());
猜猜看++;
如果(玩家>比较)
jTextField1.setText(“数字小于”+玩家);
否则如果(玩家<比较)
jTextField1.setText(“数字大于”+玩家);
其他的
jTextField1.setText(compare+“是我的号码,它花了你的时间”+
猜+猜“);
}

是的,我意识到了面板的问题,是的,我首先在console中编写了程序,但现在我必须使用swing来完成同样的操作。在控制台中,我从扫描仪获取了用户输入,这就是为什么会有这样的结果。谢谢你,我会尝试修正你所指出的。@user3732562:最重要的是,你知道这个程序没有while循环的地方吗?
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    player = Integer.parseInt(jTextField3.getText());
    guessIt++;

        if (player > compare)
           jTextField1.setText("Number is less than " + player);

        else if (player < compare)
            jTextField1.setText("Number is greater than " + player);

        else 
          jTextField1.setText(compare + " was my number, it took you " +
          guessIt + " guesses.");


      }