尝试使用JPanel绘制线条

我正在尝试使用JPanel绘制线条,而且我已经打了一些墙。 我可以将两面朝下,但一旦从x线中减去它就会出错。

线条我想画画

 package GUIstuff; import java.awt.Graphics; import javax.swing.JPanel; public class DrawPanel extends JPanel{ public void paintComponent (Graphics g){ super.paintComponent(g); int width = getWidth(); int height = getHeight(); int drawCounter = 0; // counters for all the while statements int drawCounter2 = 0; int drawCounter3 = 0; int drawCounter4 = 0; int x1 = 0; // cords change with the while statemetns int x2 = 0; int y1 = 0; int y2 = 0; while (drawCounter <= 15){ // counter y2 = 250; g.drawLine(x1, y1, x2, y2); x2 = x2 + 15; y1 = y1 + 15; drawCounter++; } int u1 = 0; int u2 = 0; int v1 = 0; int v2 = 0; while (drawCounter2 <= 15){ u2 = 250; g.drawLine(u1, v1, u2, v2); u1 = u1 + 15; v2 = v2 + 15; drawCounter2++; } int a1 = 0; int a2 = 0; int b1 = 0; int b2 = 0; while (drawCounter3 <= 15){ a2 = 250; g.drawLine(a1, b1, a2, b2); b1 = b1 + 15; a2 = a2 - 15; drawCounter3++; } } } 

这是我的跑步者class

 package GUIstuff; import javax.swing.JFrame; public class DrawPanelTest { public static void main (String args[]){ DrawPanel panel = new DrawPanel(); JFrame application = new JFrame(); application.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); application.add(panel); application.setSize (250, 250); application.setVisible(true); } } 

我在左下角和右上角有一条线,但是当我尝试从x中减去时,我只是在整个方框中划线。

在进行自定义绘制时,您应该覆盖getPreferredSize()方法,以便面板可以以其首选大小显示。

绘制线条时,两个变量相同,两个变量不同。 适当时使用width / height变量而不是硬编码。 在下面的例子中,我做了左侧和底侧。 底部显示了如何减去。 我会让你弄清楚另外两方的模式。

此外,我使面板更加动态,因此很容易配置您想要绘制的线条数量和线条之间的间隙。

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