gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:00:14 29 4
gpt4 key购买 nike

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

代码:

import java.util.Random;
import java.util.Scanner;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GameDat extends JPanel {
JPanel panel = new JPanel();
FlowLayout layout = new FlowLayout();
Random random = new Random();
JButton enter;
JTextField display;
JLabel result;

int MIN = 1;
int MAX = 50;
int compare = random.nextInt(MAX - MIN + 1) + MIN;
int player;
int guessIt = 0;


public void iniGame(){

enter = new JButton("Pick a number:");

panel.setSize(300,300);
panel.setLayout(layout);
panel.add(enter);
panel.add(display);
panel.add(result);

enter.addActionListener(new CustomActionListenerEnter());


do {

//here should go the value captured from the JTextField instead of a scanner
player = input nextInt();
guessIt++;

if (player > compare)
//this text should go to the jlabel instead of printing it
System.out.println("Number is less than " + player);
else if (player < compare)
//this text should go to the jlabel instead of printing it
System.out.println("Number is greater than " + player);
else
//this text should go to the jlabel instead of printing it
System.out.println(compare + " was my number, it took you " + guessIt + " guesses.");
} while (player != compare);
}

class CustomActionListenerEnter implements ActionListener{

public void actionPerformed(ActionEvent e){
//I wanna pass this value to my do while.
display.getText();


}
}



}

最佳答案

我的主要建议:摆脱 while 循环。这个循环适用于线性控制台类型的程序,但这不是事件驱动的 GUI 的工作方式,并且该循环将占用 Swing 事件线程,使您的 GUI 卡住和无用。因此,再次摆脱该循环,而是根据用户的响应和基于该状态的基本行为来更改此类中变量的状态。因此,在您的 ActionListener 中,从 JTextField 获取文本,通过解析将其转换为 int,检查它是否是一个合适的猜测,并通知用户他们的猜测结果。

其他问题:

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

关于java - 将从 JButton 获得的值传递给变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30792228/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com