所以我试图理解在Java中使用Gui并通过猜测数字游戏来实现这一点。它编译正确,但是当我运行程序时它只显示框架"祝贺你赢了!"在顶部。我的主要问题是为什么对话框根本没有弹出,我应该怎么做才能解决这个问题。在相关的说明中,当我将代码作为JOptionPane.showInputDialog(this,"Play again? Y/N")
时,我得到了错误消息"非静态变量,这不能从静态上下文引用。"我的次要问题,也是一个不太重要的问题,就是如何使信息垂直和水平地位于框的中心。
import javax.swing.*;
import java.awt.*;
import java.util.Scanner;
public class RandomNumberGame{
public static JLabel higherThan;
public static JPanel tooHigh;
public static JLabel lowerThan;
public static JPanel tooLow;
public static JPanel exactlyCorrect;
public static JLabel correctAnswer;
public static JFrame guiFrame;
public static void main(String[] args){
RandomFun();
}
public static void RandomFun()
{
Scanner input=new Scanner(System.in);
guiFrame = new JFrame();
guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
guiFrame.setTitle("Fun Games!");
guiFrame.setSize(500,500);
guiFrame.setLocationRelativeTo(null);
guiFrame.setVisible(true);
final JPanel tooHigh = new JPanel();
higherThan = new JLabel("Too High!");
final JPanel tooLow = new JPanel();
lowerThan = new JLabel("Too Low!");
final JPanel exactlyCorrect = new JPanel();
correctAnswer = new JLabel("Congratulations, you won!");
tooHigh.add(higherThan);
tooLow.add(lowerThan);
exactlyCorrect.add(correctAnswer);
guiFrame.add(tooHigh, BorderLayout.CENTER);
guiFrame.add(tooLow, BorderLayout.CENTER);
guiFrame.add(exactlyCorrect, BorderLayout.CENTER);
}
public static void GuessNumber(){
String again;
String lastGuess = "0";
boolean moreGame=true;
int lastGuessInt = Integer.parseInt(lastGuess.toString());
int winner = (int) (Math.random()*999+1);
while(moreGame){
lastGuess = JOptionPane.showInputDialog("Guess a Number");
if(winner < lastGuessInt){
tooHigh.setVisible(true);
tooLow.setVisible(false);
exactlyCorrect.setVisible(false);
}
else if(winner > lastGuessInt){
tooHigh.setVisible(false);
tooLow.setVisible(true);
exactlyCorrect.setVisible(false);
}
else{
tooHigh.setVisible(false);
tooLow.setVisible(false);
exactlyCorrect.setVisible(true);
moreGame=false;
}
}
again = JOptionPane.showInputDialog("Play again? Y/N");
switch(again){
case "y": case "Y":
GuessNumber();
break;
case "n": case "N":
System.exit(0);
break;
}
}
}
答案 0 :(得分:2)
为什么&#34;错误行为&#34;:
RandomFun()
RandomFun()
创建一个JFrame并显示。setVisible(true)
,设置JFrame的大小,创建方法{{ 1}}永远不会被可行的运行代码调用,代码不遵循Java命名conventinons(方法和字段应以小写字母开头,带大写字母的类),... 如果我在你的位置,我会把GUI编码放在一边,因为我首先要集中精力学习Java基础知识,包括避免所有静态方法和字段,而是创建真正的OOP-兼容类,因为在深入研究GUI编码之前,这种理解是至关重要的。只需几周的学习就足以让你足够强大,然后尝试一些Swing编码。
我尝试制作猜谜游戏程序:
GuessNumber()