2015-02-05 10 views
0

저는 아직 Java에 대해 상당히 익숙하지 않습니다. 그리고 나는 paint 메소드에 문제가 있습니다.Java : 페인트로 측정하기

: 나는 BufferedImage의를 사용하는 방법을 학습 할 때

, 나는 이미지의 크기가 프레임 크기에 약간 떨어져 상대 그래서 난 (30)의 폭 & 높이 배수를 만들기 위해 프레임 크기를 변경하여 그것을 시험이라고 생각

enter image description here

(참고 :

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의 격자를 그려했고, 선이 모두 있습니다 같은 열 및 tickness가 있지만 화면 크기를 조정할 때 다를 수 있습니다.)

페인트가 JFrame과 다른 측정 단위를 사용합니까? 그렇다면 얼마나 떨어져 있습니까? 그렇지 않다면 무엇을 잘못 할 수 있습니까?

+0

'JFrame'이 아닌'GridT'의 크기를 설정해야합니다. GridT에서'getPreferredSize' 메쏘드를 오버라이드 시켜서 크기를 돌려 줄 것을 제안합니다. 그래서 레이아웃은 그에 맞게 모든 것을 다듬을 수 있습니다. –

+0

paintComponent 메소드를 오버라이드 (override) 해, JPanel에 페인트합니다. JPanel의 기본 크기를 도면 영역의 크기로 설정합니다. 당신은 JFrame을 포장합니다. JFrame은 프레임 장식 때문에 드로잉 영역보다 커집니다. –

답변

0

paintComponent 메서드를 재정 의하여 JPanel에 페인트합니다. 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; 
      } 
     } 
    } 

}