Java:使用绘图线绘制矩形螺旋线

Java:使用绘图线绘制矩形螺旋线,java,graphics,spiral,Java,Graphics,Spiral,我正在做一个Java编程练习,我想用drawLine方法画一个矩形螺旋。这是我到目前为止得到的结果,但是螺旋图看起来不完整 import java.awt.Graphics; import javax.swing.JPanel; import javax.swing.JFrame; public class RectSpiral extends JPanel { public void paintComponent(Graphics g) { int widt

我正在做一个Java编程练习,我想用drawLine方法画一个矩形螺旋。这是我到目前为止得到的结果,但是螺旋图看起来不完整

import java.awt.Graphics; 
import javax.swing.JPanel;
import javax.swing.JFrame;

public class RectSpiral extends JPanel
{
    public void paintComponent(Graphics g)
    {
        int width = getSize().width;
        int height = getSize().height;

        int widthCenter = width / 2;
        int heightCenter = height / 2;

        for (int i = 0; i < 4 ; i++)
        {
            g.drawLine(widthCenter + (20 * i), heightCenter + (20 * i), widthCenter + (20 * i), heightCenter + 20 + (20 * i));
            g.drawLine(widthCenter + (20 * i), heightCenter + 20 + (20 * i), widthCenter - 20 - (20 * i), heightCenter + 20 + (20 * i));
            g.drawLine(widthCenter - 20 - (20 * i), heightCenter + 20 + (20 * i), widthCenter - 20 - (20 * i), heightCenter - 20 - (20 * i));
            g.drawLine(widthCenter - 20 - (20 * i), heightCenter - 20 - (20 * i), widthCenter + 20 + (20 * i), heightCenter - 20 - (20 * i));
        }
    }

    public static void main(String[] args)
    {
        RectSpiral panel = new RectSpiral();

        JFrame application = new JFrame();

        application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        application.add(panel);      
        application.setSize(300, 300); 
        application.setVisible(true);     
    }
}
导入java.awt.Graphics;
导入javax.swing.JPanel;
导入javax.swing.JFrame;
公共类JPanel
{
公共组件(图形g)
{
int width=getSize().width;
int height=getSize().height;
整数宽度中心=宽度/2;
内部高度中心=高度/2;
对于(int i=0;i<4;i++)
{
g、 抽绳(宽度中心+(20*i)、高度中心+(20*i)、宽度中心+(20*i)、高度中心+20+(20*i));
g、 抽绳(宽度中心+(20*i)、高度中心+20+(20*i)、宽度中心-20-(20*i)、高度中心+20+(20*i));
g、 抽绳(宽度中心-20-(20*i)、高度中心+20+(20*i)、宽度中心-20-(20*i)、高度中心-20-(20*i));
g、 抽绳(宽度中心-20-(20*i)、高度中心-20-(20*i)、宽度中心+20+(20*i)、高度中心-20-(20*i));
}
}
公共静态void main(字符串[]args)
{
RectSpiral面板=新的RectSpiral();
JFrame应用程序=新JFrame();
application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
应用程序。添加(面板);
应用程序。设置大小(300300);
application.setVisible(true);
}
}
这是输出:

我尝试在for循环中添加第五行,但结果仍然不完整。
非常感谢您的帮助,谢谢

在您的第一条
g.drawine
中,您需要从
y
的中心减去
(20*i)
,才能不开始

|
|
|
center
|
|<-center + (20 * i)
|
尝试以下解决方案:

package mainpack;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JPanel;

public class SpiralQuadPanel extends JPanel {

    private static final long serialVersionUID = 1L;

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D)g;

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);

        int x = getWidth() / 2;
        int y = getHeight() / 2;

        for (int i = 0; i < 8; i++) {

            int t = i * 20;

            g2d.drawLine(x + t, y + t, x + t, y + 20 + t);
            g2d.drawLine(x + t, y + 20 + t, x - 20 - t , y + 20 + t);
            g2d.drawLine(x - 20 - t, y + 20 + t, x - 20 - t, y - 20 - t);
            g2d.drawLine(x - 20 - t, y - 20 - t, x + 20 + t, y - 20 - t);
            g2d.drawLine(x  + 20 + t, y - 20 - t, x + 20 + t, y + 20 + t);
        }
    }
}
包主包;
导入java.awt.Graphics;
导入java.awt.Graphics2D;
导入java.awt.RenderingHints;
导入javax.swing.JPanel;
公共类面板扩展了JPanel{
私有静态最终长serialVersionUID=1L;
@凌驾
公共组件(图形g){
超级组件(g);
Graphics2D g2d=(Graphics2D)g;
g2d.setRenderingHint(RenderingHints.KEY_抗锯齿,
RenderingHints.VALUE_ANTIALIAS_ON);
g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
渲染提示。值(渲染质量);
int x=getWidth()/2;
int y=getHeight()/2;
对于(int i=0;i<8;i++){
int t=i*20;
g2d.拉线(x+t,y+t,x+t,y+20+t);
g2d.拉线(x+t,y+20+t,x-20-t,y+20+t);
g2d.拉线(x-20-t,y+20+t,x-20-t,y-20-t);
g2d.拉线(x-20-t,y-20-t,x+20+t,y-20-t);
g2d.拉线(x+20+t,y-20-t,x+20+t,y+20+t);
}
}
}

Omg,真管用!非常感谢你!我会尽快选择你的答案作为最佳答案:)
g.drawLine(widthCenter + (20 * i), heightCenter - (20 * i),
//                                              ^---------------change
           widthCenter + (20 * i), heightCenter + 20 + (20 * i));
package mainpack;

import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;

import javax.swing.JPanel;

public class SpiralQuadPanel extends JPanel {

    private static final long serialVersionUID = 1L;

    @Override
    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        Graphics2D g2d = (Graphics2D)g;

        g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                RenderingHints.VALUE_ANTIALIAS_ON);

        g2d.setRenderingHint(RenderingHints.KEY_RENDERING,
                RenderingHints.VALUE_RENDER_QUALITY);

        int x = getWidth() / 2;
        int y = getHeight() / 2;

        for (int i = 0; i < 8; i++) {

            int t = i * 20;

            g2d.drawLine(x + t, y + t, x + t, y + 20 + t);
            g2d.drawLine(x + t, y + 20 + t, x - 20 - t , y + 20 + t);
            g2d.drawLine(x - 20 - t, y + 20 + t, x - 20 - t, y - 20 - t);
            g2d.drawLine(x - 20 - t, y - 20 - t, x + 20 + t, y - 20 - t);
            g2d.drawLine(x  + 20 + t, y - 20 - t, x + 20 + t, y + 20 + t);
        }
    }
}