0

尝试制作 2^n 大小的网格,向用户询问“n”。我没有在 2^n 部分编码,这对我来说也有点混乱。但是现在当我从用户那里得到输入时,我的板子将无法正确显示。我的 drawLine 是一条穿过整个棋盘的对角线。

如何让板子正确显示?

这是我的代码:

import java.awt.*;
import java.util.*;
public class DrawingPanelTest2{

   public static void main(String args[]){

//        System.out.println("How big do you want your Tromino grid?");
//        System.out.println("Please enter a perfect power of 2.");
//        int size = stdin.nextInt();   

        //create a drawing panel of width=400px and height=400px
        DrawingPanel panel = new DrawingPanel(400, 400);
        //set the background of the panel to CYAN
        panel.setBackground(Color.LIGHT_GRAY);
        //create a graphic object for the panel 
        Graphics g = panel.getGraphics();

        //draw square
        drawFigure_1(g,0,0);

   }

   public static void drawFigure_1(Graphics g,int x, int y) {
        Scanner stdin = new Scanner(System.in);

        System.out.println("How big do you want your Tromino grid?");
          System.out.println("Please enter a perfect power of 2.");
          int size = stdin.nextInt(); 
        //set your drawing color to red
        g.setColor(Color.BLACK);
        for (int i = 1; i <= size; i++) {
            //draw a rectangle, (x,y) is the top-left cordiante of the rectangle, and ((i*z), (i*z)) 
            //are the width and height of the rectangle
            g.drawRect(x, y, i * size, i * size);
            g.drawLine(x, y, i *size, i *size);
        }
        g.setColor(Color.BLACK);
   }
}
4

2 回答 2

2

Graphics g = panel.getGraphics();不是自定义绘画的完成方式。

Scanner stdin = new Scanner(System.in);不是您应该在 GUI 的上下文中与用户交互的方式

首先查看使用 Swing 创建 GUI执行自定义绘画

查看GraphicsJava 文档

Graphics#drawRect接受 4 个参数,矩形的x,y位置(左上角)和widthheight,而Graphics#drawLine接受x1,y1是起点x2y2是终点。

所以你想画一条水平线,你需要使用更像g.drawLine(x, y, i * size, i);或垂直线的东西,更像g.drawLine(x, y, i, i * size);

如果你想画一个网格,那么你将需要循环,一个水平的,一个垂直的。您还需要更新每个矩形的x/ y,以便正确放置它们,因此您应该修改位置参数,而不是修改大小参数

于 2013-10-31T23:55:11.090 回答
1

尝试这样的事情:

import java.util.*;
import java.awt.*;
import javax.swing.*;
class myjava{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        double pw = input.nextDouble();
        myPan panel = new myPan(pw);
        JFrame application = new JFrame();
        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        application.add(panel);           
        application.setSize(400, 400);
        application.setVisible(true); 
    }
}

class myPan extends JPanel{
    public double pow;
    public myPan(double p){
        pow = p;
    }
    public void paintComponent(Graphics g){
        super.paintComponent(g);
        double num = Math.pow(2,pow);
        double across;
        double up;
        if(pow % 2 == 0){ //is a square
            System.out.println("square");
            across = Math.pow(num,0.5);
            up = across;
        }
        else{
            System.out.println("not");
            double x = Math.floor(pow/2);
            double y = x + 1;
            across = Math.pow(2,x);
            up = Math.pow(2,y);
        }
        System.out.println(across);
        System.out.println(up);
        //
        //
        double wid = 400/across; //width of one
        double hi = 400/up; //height of one
        double nowX = 0;
        double nowY = 0;
        for(int i = 0; i < up; i++){ //top to bottom
            nowX = 0;
            for(int j = 0; j < across; j++){
                //System.out.print("*");
                g.setColor(Color.BLACK);
                g.drawRect((int)nowX, (int)nowY, (int)wid, (int)hi);
                nowX = nowX + wid;
            }
            nowY = nowY + hi;
            //System.out.print("\n");
        }
    }
}
于 2013-11-01T00:37:35.933 回答