繁体   English   中英

如何在同一个程序中调用 2 种不同的绘制方法?

[英]How to call 2 different paint methods in the same program?

我正在尝试对数字游戏进行简单的猜测,当用户从实际答案中猜测特定范围之间的数字时,它将绘制一个具有不同颜色的矩形。 到目前为止,我只是在测试并创建了 2 个绘制方法,现在想知道如何调用方法“paint2”。

import java.awt.*;
import hsa.Console;
import javax.swing.JFrame;
import java.util.Random;
import java.awt.Canvas;
import java.awt.Graphics;

public class MashGuessTheNumber extends Canvas {
    static Console c; // The output console

    public static void main(String[] args) throws Exception {
        JFrame frame = new JFrame("My Drawing");
        Canvas canvas = new MashGuessTheNumber();
        canvas.setSize(400, 400);
        frame.getContentPane().add(canvas);
        frame.pack();
        frame.setVisible(true);
        MashGuessTheNumber sm = new MashGuessTheNumber();
        c = new Console();
        int loop = 0;
        while (loop == 0) { // loop used to continue looping the questions after one is answered
            int answer = 0;
            c.println("Welcome to the guess the number game!");
            c.println("What is your name?");
            String name = c.readLine();
            c.print("why, hello there ");
            c.println(name);
            c.println("What diffuculty would you like to play?(easy/medium/hard)");
            String diff = c.readLine();
            if (diff.equalsIgnoreCase("easy")) {
                // *Location of random number generator*
                c.println("So you chose easy, huh");
                c.println("I'm thinking of a number between 1 and 10");
                int guess = 1;
                answer = (int) (Math.random() * ((10 - 1) + 1));
                while (guess != answer) {
                    c.println("What is it?");
                    guess = c.readInt();
                    c.println(answer);
                    if ((((guess - answer) < 3) && ((guess - answer) > 0))
                            || (((answer - guess) < 3) && ((answer - guess) > 0))) {
                        c.println("EXTREMELY HOT");
                    }
                }
                if (guess == answer) {
                    c.println("You did it!");
                }

            }
            if (diff.equalsIgnoreCase("medium")) {
                // *Location of random number generator*
                c.println("So you chose medium, huh");
                c.println("I'm thinking of a number between 1 and 100");
                c.println("What is it?");
                String guess = c.readLine();
                answer = (int) (Math.random() * ((100 - 1) + 1));
            }
            if (diff.equalsIgnoreCase("hard")) {
                // *Location of random number generator*
                c.println("So you chose hard, huh");
                c.println("I'm thinking of a number between 1 and 1000");
                c.println("What is it?");
                String guess = c.readLine();
                answer = (int) (Math.random() * ((1000 - 1) + 1));
            }

            c.println("Would you like to play again?(y/n)"); // if answerd with "y" the loop will repeat
            String cont = c.readLine();
            if (cont.equalsIgnoreCase("y")) {
                loop = 0;
            } else {
                for(int i=1;i<=24;i++){
                    c.println(" ");             
                c.setCursor(12, 30);
                c.println("See you next time. Bye!");
                loop = 1; // Stops the loop and says bye to the user
            }
        }
        // Place your program here. 'c' is the output console
    }

    public void paint(Graphics g) {
        int x[] = { 35, 75, 75, 35 };
        int y[] = { 10, 10, 200, 200 };
        g.setColor(Color.black);
        int numberofpoints = 4;
        g.drawPolygon(x, y, numberofpoints);
    }

    public void paint2(Graphics g) {
        int x[] = { 35, 75, 75, 35 };
        int y[] = { 10, 10, 200, 200 };
        g.setColor(Color.blue);
        int numberofpoints = 4;
        g.drawPolygon(x, y, numberofpoints);
    }
    // main method
} // MashGuessTheNumber class

我只是想在我想要的时候在第一个矩形上方绘制一个不同的矩形,如果有另一种不使用两种方法的方法也会有帮助

我根本没有看到你在哪里调用paint(),但我会制作第二个参数,作为一个标志,告诉我是绘制蓝色矩形还是黑色矩形。 这将摆脱重复的代码。

public void paint (Graphics g, Color color)
{
    int x[] = {35, 75, 75, 35};
    int y[] = {10, 10, 200, 200};
    g.setColor (color);
    int numberofpoints = 4;
    g.drawPolygon (x, y, numberofpoints);
}

我不知道“颜色”是否是用于传递颜色的正确对象,但重点是传递一些可以帮助您选择制作矩形的颜色的东西,这样您就不必写了两种非常相似的方法。 你会像这样调用paint():

if(some condition) {
    paint(g, Color.blue);
}
else {
    paint(g, Color.black);
}

在 Java Swing 框架中,您不会自己调用 Canvas.paint()。 但是,您可以使用自己的实例变量。

如果将实例变量添加到 MashGuessNumber 类

private Color myColor = Color.BLACK;

然后修改你的if语句

if (count == answer) {
    System.out.println("You did it1);
    myColor == Color.BLUE;
    repaint();              // already a Canvas method
}

然后修改你的paint()方法

public void paint (Graphics g, Color color)
{
    int x[] = {35, 75, 75, 35};
    int y[] = {10, 10, 200, 200};
    g.setColor (myColor);
    int numberofpoints = 4;
    g.drawPolygon (x, y, numberofpoints);
}

这应该可以解决问题。

对 repaint() 的调用告诉 Swing 通过调用您的paint() 方法重绘画布。 否则系统将无法知道您的 Canvas 需要重新绘制。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM