2015-02-05 10 views
0

Я по-прежнему довольно новичок в java, и у меня возникли проблемы с методом рисования.Java: Измерение в краске

, когда я научиться использовать bufferedimages, я думал, что размеры изображения были откусил относительно размера кадра, так что я проверил это путем изменения размера кадра, чтобы сделать ширину & высоту, кратные 30:

int width = 1020; //34 * 30 
int height = 750; //25 * 30 
JFrame frame = new JFrame("Test"); 
GridT testGrid = new GridT(); 
frame.add(testGrid); 
frame.setSize(width, height); 

Далее я был метод краски нарисовать сетку 30 на 30 квадратов и, как я подозревал, сетка была обрезана по краям:

enter image description here

(Примечание: линии все тот же col или и тиканье, но может показаться различимым при изменении размера снимка экрана.)

Использует ли краска другой блок измерения, чем JFrame? Если да, то сколько это? Если нет, что я могу делать неправильно?

+0

Вы должны установить размер 'GridT' не' JFrame'. Я предлагаю вам переопределить метод getPreferredSize в вашем «GridT», чтобы вернуть размер, поэтому макеты смогут соответствующим образом изменять размер. –

+0

Вы рисуете на JPanel, переопределяя метод paintComponent. Вы устанавливаете предпочтительный размер JPanel как размер области рисования. Вы упаковываете JFrame. JFrame будет больше, чем ваша область рисования из-за декораций рамки. –

ответ

0

Вы рисуете на JPanel, переопределяя метод paintComponent. Вы устанавливаете предпочтительный размер JPanel как размер области рисования. Вы упаковываете JFrame. JFrame будет больше, чем ваша область рисования из-за декораций рамки.

Вам нужно добавить 2 пикселя к высоте и ширине области рисования, чтобы увидеть сетку. Вы начинаете с 1,1; а не 0,0.

Вот небольшая версия вашей сетки.

Grid Test

И вот исполняемый код, который создает сетку.

package com.ggl.testing; 

import java.awt.BorderLayout; 
import java.awt.Dimension; 
import java.awt.Graphics; 

import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.SwingUtilities; 

public class GridTest implements Runnable { 

    private JFrame frame; 

    @Override 
    public void run() { 
     frame = new JFrame("Grid Test"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JPanel mainPanel = new JPanel(); 
     mainPanel.setLayout(new BorderLayout()); 

     DrawingPanel drawingPanel = new DrawingPanel(); 
     mainPanel.add(drawingPanel); 

     frame.add(mainPanel); 

     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new GridTest()); 
    } 

    public class DrawingPanel extends JPanel { 

     private static final long serialVersionUID = -5711127036945010446L; 

     private int width = 750; // 25 * 30 
     private int height = 600; // 20 * 30 

     public DrawingPanel() { 
      this.setPreferredSize(new Dimension(width + 2, height + 2)); 
     } 

     @Override 
     protected void paintComponent(Graphics g) { 
      super.paintComponent(g); 

      int x = 1; 
      int y = 1; 
      int size = 30; 

      for (int i = 0; i < 25; i++) { 
       for (int j = 0; j < 20; j++) { 
        g.drawRect(x, y, size, size); 
        y += size; 
       } 
       x += size; 
       y = 1; 
      } 
     } 
    } 

}