使用drawPolygon的绘图中只有一半显示出来

时间:2013-10-15 00:00:01

标签: java drawing awt java-2d graphics2d

这是完成所有绘图的代码,但它只绘制了箭头的一半。当它是一个垂直箭头(北或南)时,它切断左侧,当它是水平的(东或西)时,它切割顶部,两者都在尖端的中心;成为完美的半箭。

public void paint(Graphics g) {
        setSize(100, steps * 50);
        for (int i = 1; i < steps + 1; i++) {
            y = i * 20;

            if (directions.peek() == "North") {
                int[] xNPoints = {x, x + 6, x + 2, x + 2, x + 2, x + 2, x + 6};
                int[] yNPoints = {y - 5,  y, y, y, y + 10, y, y};
                g.drawPolygon(xNPoints, yNPoints, 7);
            }
            else if (directions.peek() == "East") {
                int[] xEPoints = {x + 10, x + 5, x + 5, x - 5, x - 5, x + 5, x + 5};
                int[] yEPoints = {y, y + 6, y + 2, y + 2, y + 2, y + 2, y + 6};
                g.drawPolygon(xEPoints, yEPoints, 7);
            }
            else if (directions.peek() == "South") {
                int[] xSPoints = {x, x + 6, x + 2, x + 2, x + 2, x + 2, x + 6};
                int[] ySPoints = {y + 5, y, y, y - 10, y - 10, y, y};
                g.drawPolygon(xSPoints, ySPoints, 7);
            }
            else if (directions.peek() == "West") {
                int[] xWPoints = {x - 5, x, x, x + 10, x + 10, x, x};
                int[] yWPoints = {y, y + 6, y + 2, y + 2, y + 2, y + 2, y + 6};
                g.drawPolygon(xWPoints, yWPoints, 7);
            }
            g.drawString((String)directions.pop(), 5, y + 5);

该程序的目标是以相反的顺序返回一组用户提供的指示,我有很多要清理(添加例外,清理GUI),但除了我刚提供的所有代码之外的所有代码用于提示和存储用户输入的步数以及它们的数量。

1 个答案:

答案 0 :(得分:0)

让我们从你覆盖paint的事实开始,也未能调用super.paint并转移到String Java中的比较不是==但是使用equals,例如

if (directions.peek() == "North") {

应该是

if ("North".equals(directions.peek())) {

如果您要覆盖顶级容器的paint(例如JFrameJApplet),则应避免这样做。相反,您应该创建一个自定义组件,例如JPanel并覆盖它的paintComponent方法,确保您也调用super.paintComponent,否则您将以一些讨厌的绘画工件结束

请查看Performing Custom Painting了解更多详情......