当前位置: 首页 > 知识库问答 >
问题:

Java新GUI问题[已关闭]

商运锋
2023-03-14

不久前我在这里发了一个问题。我对它有不同的问题。我已经改变了我的代码,就图形处理而言,但它仍然不能正常工作。

它绘制的底部框架非常好(一个与按钮等)然而。在此之上,刽子手游戏本身应该是平局。才不是。它根本没有画任何东西。我不知道该怎么办。我要疯了,因为这是我今晚到期的最后一个项目!谁能帮帮我吗?

下面是我的代码:(我尽可能地省略了更多的代码,但是如果您需要整个程序来测试自己,请在这里找到它。)

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

import java.util.Random;

public class Hangman extends JFrame {

    private Hangman.Hangman_Panel canvas = new Hangman.Hangman_Panel();

    // How many times you can guess the wrong letter till you lose
    static final int DEAD = 7;   

    private int errors;        // amount of errors
    private String message;   // Message displaying either Error or Victory
    private String information; // Secondary Message
    private String RealWord;      // The Real word
    private StringBuffer GuessWord;// The Guessed word
    private Button StartBtn;      // The Restart Button
    private Button GoBtn;         // The Go Button
    private TextField LetterBox; // The LetterBox

    //Contructor
    public Hangman() { 

        this.add(canvas, BorderLayout.CENTER); // Add canvas to center  
        // Create a "Textbox" for the letter guessing
        LetterBox = new TextField();

        JPanel p = new JPanel();
        p.setLayout(new FlowLayout());

        p.add(StartBtn = new Button("Restart"));
        p.add(new Label("Guess a letter"));
        p.add(LetterBox);
        p.add(GoBtn = new Button("Go"));

        add(p, BorderLayout.SOUTH);

    }

    public static void main(String[] args) {

        JFrame frame = new Hangman();

        frame.setSize(300, 400);
        frame.setLocationRelativeTo(null); // Center the frame
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

    }

    class Hangman_Panel extends JPanel implements ActionListener {

        @Override
        public void paint(Graphics g) {
            super.paintComponent(g);

            int BaseY = 250;

            //THE HANGING STAND
            if (errors > 0) { //1 Error
                g.drawLine(90, BaseY, 200, BaseY); //The ground
                g.drawLine(125, BaseY, 125, BaseY-100); //The bar going up
                g.drawLine(125, BaseY-100, 175, BaseY-100); //The sidebar
                g.drawLine(175, BaseY-100, 175, BaseY-75); //The Rope
            }

            //THE PERSON
            if (errors > 1) { 
               g.drawOval(170, BaseY-75, 10, 12); // The Head       
            }

            if (errors > 2) { 
               g.drawLine(175, BaseY-62, 175, BaseY-45); // The Body    
            }

            if (errors > 3) { 
               g.drawLine(165, BaseY-65, 175, BaseY-55); // Left Arm  
            }

            if (errors > 4) { 
               g.drawLine(185, BaseY-65, 175, BaseY-55); // Right Arm 
            }

            if (errors > 5) { 
               g.drawLine(170, BaseY-30, 175, BaseY-45); //Left Leg       
            }

            if (errors > 6) {  //7 Errors
               g.drawLine(175, BaseY-45, 180, BaseY-30); // Right Left 
            }

            //Show Messages/Errors
            g.drawString(message, 40, BaseY+25);
            g.drawString(information, 25, BaseY+45);
            g.drawString(new String (GuessWord), 140, BaseY-120);

            g.drawString(new String("WELCOME TO HANGMAN!"), 75, 40);
        }

        public void init() {

            //Make buttons event listeners
            StartBtn.addActionListener(this);
            GoBtn.addActionListener(this);

            //Startup the Game
            initGame();

        }

}

private Hangman.Hangman_Panel canvas = new Hangman.Hangman_Panel();

//Constructor
public Hangman() { 

    this.add(canvas, BorderLayout.CENTER); // Add canvas to center  

共有1个答案

严玉泽
2023-03-14

快速尝试您的代码会出现一个明显的异常,您忘记在paint方法上检查字符串是否为null

g.drawString(message, 40, BaseY+25);
g.drawString(information, 25, BaseY+45);
g.drawString(new String (GuessWord), 140, BaseY-120);

我知道您的作业很快就要完成了,但我强烈建议您学习如何读取异常堆栈跟踪、使用IDE和调试代码。把它看作是对你未来编程生涯的一种投资。

 类似资料:
  • 用户输入员工的出生日期,但任务要求您必须验证输入。 我希望应用程序显示的是一个错误,当用户输入生日的日期为33或什么,因为在B. O. D.中没有这样的一天。 此外,当用户单击保存时,文本字段中的数据应该保存到数组列表中。当用户单击打印时,保存在数组列表中的数据应显示为以前的信息。

  • 我有一个课堂作业,用扫描器读取数据。 底部的部分只是为了测试我是否所有的信号都正常运行。但是,我安装的while循环似乎不想继续运行多次。它将接受一个值,然后如果我说是,我有更多的值(y或y),它将退出并打印任何一个胸部

  • 我有一个想法,就是在实现if/else时使用数组haves(question,ans)将答案与问题联系起来,以确保答案是正确的 这是解决这个问题的好方法吗?帮我plz

  • 下面是我的代码:

  • Java语法相关,什么情况下需要多打一个"\"?

  • 我是一个Java GUI初学者,在让我的面板按照我想要的方式进行更新方面遇到了一些麻烦。基本上,当用户点击我的GUI中的一个按钮时,屏幕上当前的形状应该改变为与按钮按下对应的任何形状。我的代码在下面。更新后的形状在显示前被原始形状覆盖的问题。 最后,这里是我的框架类: 谢谢你的帮助!