Trying to draw lines with JPanel

两盒软妹~` 提交于 2019-12-03 21:02:37

When doing custom painting you should override the getPreferredSize() method so the panel can be displayed at its preferred size.

When you draw the lines two variable are the same and two variables differ. Use the width/height variable when appropriate instead of hardcoding a number. In the example below I did the left and bottom sides. The bottom side shows how to subtract. I'll let you figure out the pattern for the other two side.

Also, I made the panel a little more dynamic so it will be easy to configure the number of lines you want painted and the gap between the lines.

import java.awt.*;
import javax.swing.*;

public class DrawSSCCE extends JPanel
{
    private int lines;
    private int lineGap;

    public DrawSSCCE(int lines, int lineGap)
    {
        this.lines = lines;
        this.lineGap = lineGap;
    }

    @Override
    public Dimension getPreferredSize()
    {
        int size = lines * lineGap;
        return new Dimension(size, size);
    }

    @Override
    public void paintComponent(Graphics g)
    {
        int width = getWidth();
        int height = getHeight();

        //  Draw lines starting from left to bottom

        int x = lineGap;
        int y = 0;

        for (int i = 0; i < lines; i++)
        {
            g.drawLine(0, y, x, height);
            x += lineGap;
            y += lineGap;
        }
        //  Draw lines starting from bottom to right

        x = 0;
        y = height - lineGap;

        for (int i = 0; i < lines; i++)
        {
            g.drawLine(x, height, width, y);
            x += lineGap;
            y -= lineGap;
        }

        //  Draw lines starting from right to top

        //  Draw lines starting from top to left

    }

    private static void createAndShowUI()
    {
        JFrame frame = new JFrame("DrawSSCCE");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add( new DrawSSCCE(15, 15) );
        frame.pack();
        frame.setLocationByPlatform( true );
        frame.setVisible( true );
    }

    public static void main(String[] args)
    {
        EventQueue.invokeLater(new Runnable()
        {
            public void run()
            {
                createAndShowUI();
            }
        });
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!