2013-10-31 3 views
0

Попытка создать сетку размером 2^n, задав пользователю «n». Я не закодирован в 2^n-части, что тоже немного смущает меня. Но сейчас моя доска не будет отображаться правильно, когда я получу ввод от пользователя. Моя drawLine - это диагональная линия, проходящая через всю доску.Возникли проблемы с сеткой создания drawPanel

Как получить правильное отображение платы?

Вот мой код:

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); 
    } 
} 

ответ

2

Это Graphics g = panel.getGraphics(); не так, как на заказ картина делается.

Это Scanner stdin = new Scanner(System.in); не так, как вы должны взаимодействовать с пользователем с в контексте GUI

Start, принимая взглянуть на Creating a GUI with Swing и Performing Custom Painting

Взгляните на Graphics Java Docs

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 каждого прямоугольник, так что они располагаются исправлены, так вместо изменения параметров размера, вы должны быть изменения позиции параметры

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"); 
     } 
    } 
} 
+0

Ты мужчина никогда не комментируй мой комментарий раньше !!!! – jSeesFor3ver

+0

Теперь, когда у меня есть это, у меня есть программа для головоломок с тромминовым кодированием, но мне нужно комбинировать то, что у меня есть с графикой. Это то, что до меня дошло, я почти готов. Не могли бы вы посмотреть? http://stackoverflow.com/questions/19717359/tromino-program-using-graphics – jSeesFor3ver

Смежные вопросы