2012-05-21 2 views
0

하나의 격자 셀 안에 격자와 삼각형을 그리는 코드를 작성했습니다. 격자 크기는 창이 최대화되거나 최소화 될 때 증가/감소됩니다.직사각형 격자 안의 삼각형

내 요구 사항은 그리드 크기가 증가/감소 할 때마다 그리드 셀에 맞게 삼각형 크기를 늘리거나 줄여야한다는 것입니다. 당신의 도움에 미리

import java.awt.BasicStroke; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Polygon; 
import java.awt.RenderingHints; 
import java.awt.event.WindowAdapter; 
import java.awt.event.WindowEvent; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 


public class Grid extends JPanel { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     Grid g = new Grid(); 
     JFrame f = new JFrame("Application GUI Window"); 
     f.addWindowListener(new WindowAdapter() { 
      public void windowClosing(WindowEvent e) {System.exit(0);} 
     }); 
     f.getContentPane().add("Center", g); 
     f.pack(); 
     f.setSize(new Dimension(450,400)); 
     f.show(); 
    } 

    public void paint(Graphics g) { 

     Graphics2D g2d = (Graphics2D) g; 
     Dimension d = getSize(); 
     g2d.setBackground(getBackground()); 
     g2d.clearRect(0, 0, d.width, d.height); 
     g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, 
          RenderingHints.VALUE_ANTIALIAS_ON); 
     drawGrid(d.width, d.height, g2d); 
     int[] xPoints = {20,15,25}; 
     int[] yPoints = {15,25,25}; 
     int n = 3; 

     Polygon triangle = new Polygon(xPoints, yPoints, n); 
     g.fillPolygon(triangle); 
    } 

    private void drawGrid(int width, int height, Graphics2D g2d) { 

     /* BasicStroke border = new BasicStroke(3, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND, 0, new float[]{0,1,0,1}, 0); 
     g2d.setStroke(border); 
     g2d.drawRect(3,3,width-6,height-6);*/ 

     //horizontal lines 
     int cellheight = height/10; 
     int cellwidth = width/5; 
     for (int j=0;j<height;j=j+cellheight) 
     { 
      BasicStroke line = new BasicStroke(1, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND, 0, new float[]{0,1,0,1}, 0); 
       g2d.setStroke(line); 
       g2d.drawLine(0, j, cellwidth*5, j); 

     } 

     //vertical lines 

     for (int i=0;i<width;i=i+cellwidth) 
     { 
      BasicStroke line = new BasicStroke(1, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_ROUND, 0, new float[]{0,1,0,1}, 0); 
       g2d.setStroke(line); 
       g2d.drawLine(i, 0, i, cellheight*10); 

     } 

    } 
} 

감사를 다음과 같이

내 코드입니다.

+0

그리고 정확히 무엇이 문제입니까? – Woody

+0

이것은 나에게 도움이되는 사이트가 아닙니다. 요구 사항 게시는 일반적으로 눈살을 찌푸리게됩니다. – Randy

답변

1

삼각형의 좌표를 표 셀의 차원에 연결할 수 있습니다. 스윙 당신이 일반적으로 paintComponent()보다는 paint(),하지 않는 한 어떤 특별한 경우를 오버라이드 (override) 할 필요가 있음을

int cellHeight = d.height/10; 
int cellWidth = d.width/5; 

int xOffset = cellWidth/6; 
int yOffset = cellHeight/6; 

int[] xPoints = {cellWidth/2, xOffset, cellWidth - xOffset}; 
int[] yPoints = {yOffset, cellHeight - yOffset, cellHeight - yOffset}; 

Polygon triangle = new Polygon(xPoints, yPoints, xPoints.length); 

참고 : 여기에 귀하의 예를 기반으로하는 조각이다. 자세한 내용은 A Closer Look at the Paint Mechanism을 참조하십시오.

또한 show()은 (는) setVisible()으로 대체됩니다. 다음과 같이 바꿀 수 있습니다 : setVisible(true)

+0

도움에 많은 감사드립니다 :) – user1382494

+0

@ user1382494 기꺼이 도와 드리겠습니다! – tenorsax