试图制作一个2^n大小的网格,要求用户输入'n'。我没有在 2^n 部分编码,这对我来说也有点混乱。但是现在,当我从用户那里获得输入时,我的板将无法正确显示。我的画线是贯穿整个棋盘的对角线。
如何正确显示看板?
这是我的代码:
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);
}
}
这个Graphics g = panel.getGraphics();
不是定制绘画的方式。
此Scanner stdin = new Scanner(System.in);
不是您应该如何从 GUI 上下文中与用户交互
首先查看使用 Swing 创建 GUI 并执行自定义绘画
查看 Java 文档Graphics
Graphics#drawRect
取4个参数,x
,y
位置(左上角)和整流管的width
和height
,而Graphics#drawLine
取x1
,y1
,这是起点和x2
,y2
终点。
所以你想画一条水平线,你需要使用更像g.drawLine(x, y, i * size, i);
的东西,或者一条垂直线,更像g.drawLine(x, y, i, i * size);
如果您尝试绘制网格,那么您将需要循环,一个水平和一个垂直。 您还需要更新每个矩形的x
/y
,以便对它们的位置进行校正,因此您应该修改位置参数,而不是修改大小参数
尝试这样的事情:
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");
}
}
}