【问题标题】:Java word game with GUI. What is wrong with my code?带有 GUI 的 Java 文字游戏。我的代码有什么问题?
【发布时间】:2013-09-10 16:55:03
【问题描述】:

我创建了一个简单的 Java GUI 文字游戏。

它从一个头开始,用户尝试猜测这个词。如果正确,则系统打印出正确的。如果是错误的,它会打印出“错误”并绘制一个身体。顶部的文本框是隐藏的单词(不是真正隐藏的),底部是您插入猜测的位置。

这个程序的问题是,用户猜错词后,身体没有被画出来。

第一课:

package hangman;

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JPanel;

public class NewClass extends JPanel {

int lineA, lineB, lineC, LineD;
int guess;

public void paintComponent(Graphics g) {

    super.paintComponent(g);
    this.setBackground(Color.ORANGE);
    //head
    g.drawOval(110, 10, 25, 25);
    g.drawLine(lineA, lineB, lineC, LineD);// (ideal) 125, 40, 120, 100

}

public void newPaint(int a, int b, int c, int d) {


    lineA = a;
    lineB = b;
    lineC = c;
    LineD = d;

 super.revalidate();

}
}

第二类: 包刽子手;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class NewClass1 extends JFrame {

private JTextField answerBox, hiddenAnswer;
NewClass nc = new NewClass();

public NewClass1() {

    hiddenAnswer = new JTextField();

    hiddenAnswer.setText("hat");// this is the word for the hangman

    answerBox = new JTextField("put you answer in here");
    answerBox.addActionListener(
            new ActionListener() {
        public void actionPerformed(ActionEvent event) {


            if (event.getActionCommand().equals(hiddenAnswer.getText())) {
                System.out.println("you got it right");
            } else {
                System.out.println("sorry you got it wrong");


                nc.newPaint(125, 120, 40, 100);

            }
        }
    });
    add(BorderLayout.NORTH, hiddenAnswer);

    add(BorderLayout.SOUTH, answerBox);
 }
 }

入口点

    NewClass1 ncc = new NewClass1();

    NewClass nc = new NewClass();
    ncc.add(BorderLayout.CENTER,nc);
    ncc.setVisible(true);
    ncc.setSize(300,300);
    ncc.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}
}

【问题讨论】:

  • 您应该考虑比NewClassNewClass1 更有意义的类名称。如果你定义了像newPaint(…) 这样的方法,那么使用该方法而不是直接写入对象的字段怎么样?

标签: java swing user-interface


【解决方案1】:

在事件中使用你的newPaint API,而不是直接设置NewClass的字段。

if (event.getActionCommand().equals(hiddenAnswer.getText())) 
{
     System.out.println("you got it right");
} 
else 
{
     System.out.println("sorry you got it wrong");
     nc.newPaint(125, 120, 40, 100);
}

编辑:NewClass1 中,将repaint() 替换为revalidate()Here's the reference.

Edit2:在您的情况下,最好不要NewClass1 之外创建NewClass 面板。在NewClass1 构造函数中,您可以这样做:

nc = new NewClass();
add(BorderLayout.CENTER, nc);

在添加hiddenAnswer 之前,您可以从入口点删除NewClass

问题是,您不是在处理在入口点创建的 NewClass 实例,而是在使用随机的新 NewClass

【讨论】:

  • 我没有再收到任何错误。但是现在,它仍然没有绘制身体。
  • @pur3extrme 在您的NewClass 中调用revalidate() 而不是repaint()
  • 很抱歉,该程序仍未修复所有更正。
  • @pur3extrme 请编辑您的问题并发布程序入口点,即您的main 方法。
  • 好的,请立即查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-16
  • 1970-01-01
  • 2012-12-10
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多