Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 绘制多边形:找不到错误_Java_Swing_Graphics - Fatal编程技术网

Java 绘制多边形:找不到错误

Java 绘制多边形:找不到错误,java,swing,graphics,Java,Swing,Graphics,我制作了一个程序来绘制多边形,但是多边形没有显示出来。我正在尝试修复我的代码 public static class Polygon extends JPanel { public Polygon() { setBackground(Color.black); } public void paintComponent(Graphics p) { super.paintComponent(p); int[] lis

我制作了一个程序来绘制多边形,但是多边形没有显示出来。我正在尝试修复我的代码

public static class Polygon extends JPanel {

    public Polygon() {
        setBackground(Color.black);
    }

    public void paintComponent(Graphics p)
    {
        super.paintComponent(p);
        int[] list1 = {100,50,150,200};  
        int[] list2 = {50,100,200,150};
        int n = 3;

        drawAPolygon(list1,list2,n);
    }

    public void drawAPolygon(int[] xPoints, int[] yPoints, int numPoints){
        Graphics p = getGraphics();
        p.setColor(Color.yellow);
        p.drawPolygon(xPoints, yPoints, numPoints);
    }       
}    

我不知道你为什么有一个静态类,先改变它,然后尝试下面的建议

我会用paintComponent方法做所有的事情。这段代码对我来说很好:

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

public class Polygon extends JPanel {

    public void paintComponent(Graphics p)
    {
        super.paintComponent(p);

        int[] list1 = {100,50,150,200};  
        int[] list2 = {50,100,200,150};
        int n = 3;

        p.setColor(Color.yellow);
        p.drawPolygon(list1, list2, n);
    }    
}
下面是一个带有main方法的runner类,您可以对其进行测试:

import javax.swing.JFrame;

public class DrawPolygon {
    public static void main(String[] args) {
        Polygon panel = new Polygon();
        JFrame frame = new JFrame();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }
}

这种颜色显示不好,也许有办法使它变厚?

我不确定为什么要使用静态类,请先更改它,然后尝试下面的建议

我会用paintComponent方法做所有的事情。这段代码对我来说很好:

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

public class Polygon extends JPanel {

    public void paintComponent(Graphics p)
    {
        super.paintComponent(p);

        int[] list1 = {100,50,150,200};  
        int[] list2 = {50,100,200,150};
        int n = 3;

        p.setColor(Color.yellow);
        p.drawPolygon(list1, list2, n);
    }    
}
下面是一个带有main方法的runner类,您可以对其进行测试:

import javax.swing.JFrame;

public class DrawPolygon {
    public static void main(String[] args) {
        Polygon panel = new Polygon();
        JFrame frame = new JFrame();
        frame.add(panel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500, 500);
        frame.setVisible(true);
    }
}
这种颜色显示不好,也许有办法使它变厚?

getGraphics()
方法不适合您。但是您可以将
图形作为参数传递

 public static class Polygon extends JPanel {

            public Polygon() {
                setBackground(Color.black);
            }

            public void paintComponent(Graphics p)
            {
                super.paintComponent(p);
                int[] list1 = {100,50,150,200};  
                int[] list2 = {50,100,200,150};
                int n = 3;
                drawAPolygon(p,list1,list2,n);
            }

            public void drawAPolygon(Graphics p, int[] xPoints, int[] yPoints, int numPoints){
                p.setColor(Color.yellow);
                p.drawPolygon(xPoints, yPoints, numPoints);
            }       
        }  
getGraphics()
方法不适合您。但是您可以将
图形作为参数传递

 public static class Polygon extends JPanel {

            public Polygon() {
                setBackground(Color.black);
            }

            public void paintComponent(Graphics p)
            {
                super.paintComponent(p);
                int[] list1 = {100,50,150,200};  
                int[] list2 = {50,100,200,150};
                int n = 3;
                drawAPolygon(p,list1,list2,n);
            }

            public void drawAPolygon(Graphics p, int[] xPoints, int[] yPoints, int numPoints){
                p.setColor(Color.yellow);
                p.drawPolygon(xPoints, yPoints, numPoints);
            }       
        }  

这是正确的,但我想通过制作一个方法来实现这一点。这是正确的,但我想通过制作一个方法来实现这一点。我尝试了Graphics g=getGraphics();在方法内部,但这不起作用。是否有任何方法可以在方法内部初始化图形。当调用
getGraphics()
方法时,任何更改都将是临时的,并且在下次重新绘制时会丢失。因此,您需要在
paintComponent(Graphics g)
处初始化它,然后在方法中使用它。在
drawAPolygon
内部没有初始化
Graphics
的方法。我尝试了Graphics g=getGraphics();在方法内部,但这不起作用。是否有任何方法可以在方法内部初始化图形。当调用
getGraphics()
方法时,任何更改都将是临时的,并且在下次重新绘制时会丢失。因此,您需要在
paintComponent(Graphics g)
处初始化它,然后在方法中使用它。无法在
drawAPolygon
内部初始化
Graphics