2012-05-21 142 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

您可以将三角形的坐标与网格单元的尺寸绑定。这是基于你的榜样片段:

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

需要注意的是在Swing你通常应该重写paintComponent()而非paint(),除非在一些特殊情况。有关更多详细信息,请参阅A Closer Look at the Paint Mechanism

另请注意,show()已弃用,因此弃用setVisible()。您可以将其替换为:setVisible(true)

+0

非常感谢您的帮助:) – user1382494

+0

@ user1382494很高兴我可以帮忙! – tenorsax