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

这段代码并没有画出它想要的模具..有什么提示吗?(Java,请参阅两个类)

何灿
2023-03-14
import java.awt.Color;
import java.util.Scanner;

public class RollTheDie
{
    public static void main(String[] args)
    {
        final int WINDOW_HEIGHT = 350;
        final int WINDOW_WIDTH = 300;

        System.out.println("Hi! Let's play dice!\n");

        Scanner kb = new Scanner( System.in );

        System.out.print("Enter the number on the face of the die:");
        int num = kb.nextInt();

        System.out.print("Enter the location of the die:");
        int x = kb.nextInt();
        int y = kb.nextInt();

        System.out.println("I hope you had fun! Bye!");

        JFrame dieWindow = new JFrame();
        dieWindow.setBackground(Color.gray);
        dieWindow.setSize(WINDOW_HEIGHT, WINDOW_WIDTH);
        dieWindow.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        dieWindow.setTitle("Roll the Die");

        Die newDie = new Die(num,x,y);
        dieWindow.add(newDie);
        dieWindow.setVisible(true);


    }
}
public class Die extends JPanel
{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    int xCoordinate;
    int yCoordinate;
    int num;


    Graphics pen, pane;

    private static final int DIE_LENGTH = 60;        //Set's the size
    private static final int DIE_WIDTH = 60;        //of the die
    private static final int DIE_HEIGHT = 60;
    private static final int DOT_LENGTH = 10;
    private static final int DOT_WIDTH = 10;
    private static final Color LINE_COLOR = Color.black;
    private static final Color DIE_COLOR = Color.white;
    private static final Color DOT_COLOR = Color.black;
    private static final int DIE_VERT = 10;
    private static final int DIE_HORI = 10;


    public Die(int dieNum, int x, int y)
    {
        xCoordinate = x;
        yCoordinate = y;

        num = dieNum;
    }

    public void paintDie(Graphics pen)
    {

        //Creates the square
        pen.drawRect(getX(), getY(), DIE_WIDTH, DIE_HEIGHT);
        pen.setColor(LINE_COLOR);
        pen.fillRect(xCoordinate, yCoordinate, DIE_LENGTH, DIE_WIDTH);
        if (num <= 0)
            drawBlank();
        else if (num == 1)
            drawOne();
        else if (num == 2)
            drawTwo();
        else if (num == 3)
            drawThree();
        else if (num == 4)
            drawFour();
        else if (num == 5)
            drawFive();
        else if (num == 6)
            drawSix();



    }

    private void drawBlank ()
    {
        pane.setColor(DIE_COLOR);
        pane.fillRect(xCoordinate, yCoordinate, DIE_LENGTH, DIE_WIDTH);

    }

    private void drawDot (int x, int y)
    {
        pane.setColor(DOT_COLOR);
        pane.fillOval(x, y, DOT_LENGTH, DOT_WIDTH);

    }
    private void drawOne ()
    {

        drawBlank();
        drawDot(xCoordinate, yCoordinate);

    }
    private void drawTwo ()
    {
        drawBlank();
        pane.fillOval((xCoordinate - DIE_HORI), (yCoordinate + DIE_VERT), DOT_LENGTH, DOT_WIDTH);
        pane.fillOval((xCoordinate + DIE_HORI), (yCoordinate - DIE_VERT), DOT_LENGTH, DOT_WIDTH);

    }
    private void drawThree ()
    {
        drawBlank();
        drawOne();
        drawTwo();

    }

    private void drawFour ()
    {
        drawBlank();
        drawDot((xCoordinate - DIE_HORI),(yCoordinate + DIE_VERT));
        drawDot((xCoordinate + DIE_HORI),(yCoordinate + DIE_VERT));
        drawDot((xCoordinate - DIE_HORI),(yCoordinate - DIE_VERT));
        drawDot((xCoordinate + DIE_HORI),(yCoordinate - DIE_VERT));

    }

    private void drawFive ()
    {
        drawBlank();
        drawFour();
        drawOne();


    }

    private void drawSix()
    {
        drawBlank();
        drawFour();
        drawDot((xCoordinate - DIE_HORI), yCoordinate);
        drawDot((xCoordinate + DIE_HORI) , yCoordinate);

    }

}

共有1个答案

臧翰采
2023-03-14

您的类有一个paintdie(Graphics g)方法,它包含用于绘制事物的代码,但它从未被调用,因此什么都看不到是有意义的。此外,您的JPanel类没有PaintComponent(Graphics g)方法重写,这是应该进行绘图的地方。没有这个,什么也画不出来。

尝试将paintDie更改为PaintComponent:

@Override
protected void paintComponent(Graphics pen) {
   super. paintComponent(pen);
   // ... etc
}

不要忘记添加@override注释,以便您知道您实际上正在重写父方法。

 类似资料:
  • 问题内容: 我正在阅读有关ConcurrentModificationException以及如何避免它的信息。找到了一篇文章。该文章中的第一个清单具有与以下相似的代码,这显然会导致异常: 然后,它继续以各种建议解释如何解决该问题。 当我尝试重现它时,我没有遇到异常! 为什么我没有得到例外? 问题答案: 根据JavaAPI文档,Iterator.hasNext不会抛出。 检查后,您从列表中删除了一个

  • 错误: Test.ts(18,30):错误TS2345:类型为“{color1:String;}”的参数不能分配给类型为“squareConfig”的参数。对象文本只能指定已知属性,并且“SquareConfig”类型中不存在“Color1”。

  • 在方法或类范围内,下面的行编译(带有警告): 在类作用域中,变量获取其默认值,以下给出未定义引用错误: 这难道不是第一个应该以相同的未定义引用错误结束吗?或者第二行应该编译?或者我错过了什么?

  • 问题内容: 考虑以下Java源代码: 该是。 为什么该语句有时会抛出? 谢谢。 问题答案: 线程安全 如果您的代码是多线程的,则有可能。例如: 如果在语句执行之后(但在循环之前)立即将另一个线程设置为,则您将获得一个。通过使用访问器(与延迟初始化结合使用)可以避免这种情况。 另外,如其他人所提到的,如果可能,请避免使用有利于泛型的此类循环构造。有关详细信息,请参见其他答案。 配件提供保护 如果始终

  • 这段代码是我用Java Swing制作的Tic-Tac-Toe程序的一部分。为什么在添加用于添加按钮的for语句时返回NullPointerException?