2016-07-23 50 views
-8

据我所知,下面的程序做了一个多边形。但为什么它不起作用?这需要来自另一个类的drawPolygon函数的参数。这个程序为什么不起作用?

package test1; 

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

public class Sc extends JPanel { 
    int[] xpoints=new int[10]; 
    int[] ypoints=new int[10]; 
    int npoints; 

    public void method(int a[],int b[], int num){ 
     xpoints=a; 
     ypoints=b; 
     npoints=num; 
    } 

    private static final long serialVersionUID = 1L; 

    public void paint(Graphics g) { 
     g.drawPolygon(xpoints, ypoints, npoints); 
    } 

    public static void main(String[] args) { 
     MainClass mc = new MainClass(); 
     mc.fun(); 
     JFrame frame = new JFrame(); 
     frame.getContentPane().add(new Sc()); 

     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(200,200); 
     frame.setVisible(true); 
     } 
} 

这是MainCLass.java

package test1; 

public class MainClass { 
    int x[] = {25, 145, 25, 145, 25}; 
    int y[] = {25, 25, 145, 145, 25}; 
    int npoints = 5; 

    public void fun(){ 
    Sc sc = new Sc(); 
    sc.method(x,y,npoints); 
    } 
} 

我碰到这个代码来了,但我不知道什么是错用它。我是新来的Java.Could有人请帮助我。 在此先感谢。

+1

可否请你描述的预期行为,你的程序? – SerCe

+0

你有两个不同的'Sc'对象。 – Stewart

+0

你运行哪种主要方法,为什么你认为它不起作用? – user902383

回答

1

当你的代码是非常的混乱(并且不容易读)你的问题是,您要添加SC的不同实例的窗格,而不是增加你被绘制一个:

frame.getContentPane().add(new Sc()); 

相反你必须添加“这个”,你不能从一个静态方法来实现,但你可以创建SC的实例,并用一个方法初始化:

public static void main(String[] args) { 

    Sc sc = new Sc(); 
    MainClass mc = new MainClass(); 
    mc.fun(sc); 
    sc.initFrame(); 

} 

public void initFrame() { 
    JFrame frame = new JFrame(); 
    frame.getContentPane().add(this); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    frame.setSize(200, 200); 
    frame.setVisible(true); 
} 

你也必须采取SC如在争论中你的“有趣”的方法(然后再从sc对象中调用“方法”方法...再次是能够在只有一个类来完成这将是少了很多混乱):

public void fun(Sc sc){ 
    sc.method(x,y,npoints); 
} 

这仍然是非常的混乱,但至少现在的工作;)