首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >矩形网格内的三角形

矩形网格内的三角形
EN

Stack Overflow用户
提问于 2012-05-21 22:14:50
回答 1查看 974关注 0票数 0

我已经写了一个代码来绘制网格和一个网格单元格内的三角形。当窗口最大化或最小化时,网格大小增加/减小。

我的要求是,每次网格大小增加/减少时,三角形大小也应该增加/减少以适合网格单元。

我的代码如下:

代码语言:javascript
复制
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);

        }

    }
}

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-26 01:13:26

您可以将三角形的坐标与网格单元的尺寸关联起来。以下是基于您的示例的代码片段:

代码语言:javascript
复制
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

还要注意,为了支持setVisible()show()已被弃用。您可以将其替换为:setVisible(true)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10686960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档