проблема с правильной сеткой и отсутствием цвета фона - PullRequest
1 голос
/ 21 июня 2011

Это мой код, который пытается создать сетку 400 x 400 , но выдает следующее: enter image description here

Без сомнения, это не сетка 400 x 400 .

Я не могу определить, где у меня неправильная логика.Я выделил часть, ответственную за рисование.

import javax.swing.*;
import java.awt.*;

class tester1 extends JPanel {
 tester1() {
  setPreferredSize(new Dimension(400,400));
  this.setBackground(Color.black);
  JFrame fr = new JFrame();
  fr.add(this);
  fr.pack();
  fr.setVisible(true);
  fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  repaint();
 }

  public void paintComponent(Graphics g) {   // <----- part responsible for drawing
   g.setColor(Color.red); 
     for(int x = 0 ; x <= 400 ; x += 10 ) {
       g.drawLine( x , 0 , 400 , x );
     }
     for(int y = 0 ; y <= 400 ; y += 10 ) {
       g.drawLine( y , 0 , y , 400 );
     }
  }   // <---- till here

  public static void main(String args[]) {
     new tester1();
  }
 }

Какую ошибку я допустил в методе paintComponent?

Также в выводе почему я не получаю BLACK цвет в качестве фона, когда я написал this.setBackground(Color.black)?

Ответы [ 3 ]

2 голосов
/ 21 июня 2011

Позвоните super.paintComponent() перед тем, как начать рисовать, чтобы фон был окрашен в черный цвет.

Что касается линий: у вас есть координаты x и y, смешанные.Это должно быть: (int x1, int y1, int x2, int y2)

В частности, посмотрите на:

 g.drawLine( x , 0 , 400 , x );

И спросите себя, почему вы меняете один X и один Y и держите другой X и другой Y постоянным.

Где как здесь:

 g.drawLine( y , 0 , y , 400 );

Вы держите оба Ys постоянными и меняете оба X (Подсказка: ваше другое утверждение должно выглядеть так.).

2 голосов
/ 21 июня 2011

Я думаю, что ваш текущий вывод v. Довольно, но в любом случае ..

import javax.swing.*;
import java.awt.*;

class tester1 extends JPanel {
 tester1() {
  setPreferredSize(new Dimension(400,400));
  this.setBackground(Color.black);
  JFrame fr = new JFrame();
  fr.add(this);
  fr.pack();
  fr.setVisible(true);
  fr.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  repaint();
 }

  public void paintComponent(Graphics g) {
   // as mentioned by jzd
   super.paintComponent(g);
   g.setColor(Color.red);
     for(int x = 0 ; x <= getWidth() ; x += 10 ) {
       // as mentioned by ditkin
       g.drawLine( x , 0 , x , getHeight() );
     }
   g.setColor(Color.yellow);
     for(int y = 0 ; y <= getHeight() ; y += 10 ) {
       // also this
       g.drawLine( 0 , y , getWidth() , y );
     }
  }

  public static void main(String args[]) {
     new tester1();
  }
 }

Кстати - если вы не наберете setResizable(false) в кадре, используйте getHeight() / getWidth() при рисовании.

Скриншот

Red/yellow on black grid

0 голосов
/ 21 июня 2011

Я считаю, что эта строка:

g.drawLine( x , 0 , 400 , x );

Следует читать:

g.drawLine( x , 0 , x, 400);
...