Java GUI刽子手游戏-如何让这些不同的部分一起工作?

Java GUI刽子手游戏-如何让这些不同的部分一起工作?,java,swing,class,Java,Swing,Class,我有(几乎)游戏的工作部件,但它们不能一起工作。我是一个完全的初学者,所以我不知道如何找出问题所在。 我有三门课: GameControls包含游戏的主要功能 Hangman设置一个JFrame,调用drawHangman方法并包含main方法 drawHangman有绘制hangman图形的说明 我怀疑这可能不是最好的方法,所以如果这些课程毫无意义,请让我知道(并告诉我为什么!) 问题 GameControls本身运行良好。用户可以选择要猜测的字母,显示正常,如果猜测错误,LivesRep

我有(几乎)游戏的工作部件,但它们不能一起工作。我是一个完全的初学者,所以我不知道如何找出问题所在。 我有三门课:

  • GameControls包含游戏的主要功能
  • Hangman设置一个JFrame,调用drawHangman方法并包含main方法
  • drawHangman有绘制hangman图形的说明
    我怀疑这可能不是最好的方法,所以如果这些课程毫无意义,请让我知道(并告诉我为什么!)
问题
  • GameControls本身运行良好。用户可以选择要猜测的字母,显示正常,如果猜测错误,LivesRepaining计数会下降。
    但是
    如果我使用hangman main方法运行,窗口会出现,控件不再工作
  • 即使LivesMaining计数减少,我也不知道如何让drawHangman部分使用该变量并实现switch语句来绘制hangman
  • 我的想法
    • 在我看来,类/方法的编写/设计方式可能会导致问题(但我不知道如何诊断和修复这个问题。我已经尝试过!)
    • 我认为问题1的原因可能是当两个窗口都打开时,程序不知道操作来自何处,和/或我需要添加更多ActionListener内容。
      由于我对编程如此陌生,我花了很长时间来研究和尝试不同的东西,我真的很想要一些指针。我的代码如下
    刽子手级 游戏控制类
    • livesRemaining
      是一个整数
    • 当您将其放入
      switch
      语句中时,大小写应该是整数而不是字符

      case 6:
      
      而不是

      case '6':
      

    祝你好运。

    错过了
    super.paintComponent
    作为
    public void paintComponent(Graphics comp
    )中的第一个代码行,可能
    dispose()
    作为同一代码块中的最后一个代码行(与
    super.paintComponent
    相比真的不重要)
    UIManager.setLookAndFeel(………
    应该是
    公共静态void main(字符串[]args)中的第一个代码行
            import java.awt.*;
            import java.awt.geom.*;
            import javax.swing.*;
    
            public class drawHangman extends JPanel 
            {
            /**
             * 
             */
            private static final long serialVersionUID = -3924721752542320241L;
    
            public void paintComponent (Graphics comp)
            {
                Graphics2D comp2D = (Graphics2D) comp;
                comp2D.setColor(Color.white);
                comp2D.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
                Rectangle2D.Float background = new Rectangle2D.Float(0F,0F,400,600/*(float)getSize().width,(float)getSize().height*/);
                    comp2D.fill(background);
            
                //setting for colour etc
                comp2D.setColor(Color.black);
                BasicStroke pen = new BasicStroke(2.0f,BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND);
                comp2D.setStroke(pen);      
            
                int livesRemaining = 10;
                switch (livesRemaining)
                {
                case '9':
                    Line2D.Float gallowsBase = new Line2D.Float(50F,500F,500F,500F);
                    comp2D.draw(gallowsBase); 
                    break;
                case '8':   
                    Line2D.Float gallowsVertical = new Line2D.Float(150F,500F,150F,100F);
                    comp2D.draw(gallowsVertical);
                    break;
                case '7':
                    Line2D.Float gallowsTop = new Line2D.Float(150F,100F,400F,100F);
                    comp2D.draw(gallowsTop);
                    break;
                case '6':
                    Line2D.Float rope = new Line2D.Float(400F,100F,400F,150F);
                    comp2D.draw(rope);
                    break;
                case '5':
                    Ellipse2D.Float head = new Ellipse2D.Float(362F,150F,76F,76F);
                    comp2D.draw(head); 
                    break;
                case '4':
                    Line2D.Float body = new Line2D.Float(400F,226F,400F,325F);
                    comp2D.draw(body);
                    break;
                case '3':
                    Line2D.Float arm1 = new Line2D.Float(400F,226F,300F,275F);
                    comp2D.draw(arm1);
                    break;
                case '2':
                        Line2D.Float arm2 = new Line2D.Float(400F,226F,500F,275F);
                    comp2D.draw(arm2);
                    break;
                case '1':
                    Line2D.Float leg1 = new Line2D.Float(400F,325F,300F,400F);
                    comp2D.draw(leg1);
                    break;
                case '0':
                    Line2D.Float leg2 = new Line2D.Float(400F,325F,500F,400F);
                    comp2D.draw(leg2);
                    /*youLosePopup lose = new youLosePopup();*/
                }    
            }
            /*public static void main (String[] args)
            {
                drawHangman draw = new drawHangman(); 
            }*/
        }
        
    
    
        
    
    case 6:
    
    case '6':