Java 绘制方法重复3次,而不是1次

Java 绘制方法重复3次,而不是1次,java,swing,awt,Java,Swing,Awt,当我的输入arr[I][j]==1时,我想画一个矩形,但绘制方法将该过程重复3次。我怎样才能修好它 我从我的主课上这样称呼绘画: new foo(cnv).start();//cnv is an Integer 2d array 这是我画矩形的foo类: public class foo extends JPanel{ Integer k[][]; public void paint(Graphics g){ int row=k.length;

当我的输入
arr[I][j]==1
时,我想画一个矩形,但绘制方法将该过程重复3次。我怎样才能修好它

我从我的主课上这样称呼绘画:

new foo(cnv).start();//cnv is an Integer 2d array
这是我画矩形的foo类:

public class foo extends JPanel{
    Integer k[][];
    public void paint(Graphics g){
        int row=k.length;
        int col=k[0].length;
        System.out.println(row+" "+col);

        for(int i = 0; i < row; i+=1){
            for(int j = 0; j < col; j+=1){
                if (k[i][j]==1)
                    g.fillRect(i,j,10,10);        
            }        
        }    
    }

    public foo(Integer k[][]){
        this.k=k;
    }
    public void start(){
        JFrame frame = new JFrame();
        frame.setSize(1000,1000);
        frame.getContentPane().add(new foo(k));
        frame.setLocationRelativeTo(null);
        frame.setBackground(Color.LIGHT_GRAY);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
公共类foo扩展了JPanel{
整数k[][];
公共空间涂料(图g){
int row=k.长度;
int col=k[0]。长度;
系统输出打印项次(行+列+列);
对于(int i=0;i
没有问题,这就是Swing的工作方式。构件从来不会只绘制一次。只要Swing确定组件应该重新绘制,组件就会重新绘制。例如,如果调整框架的大小,组件的大小可能会更改,以便重新绘制组件。此外,自定义绘制应通过过度缠绕paintComponent(…)而不是paint(…)来完成,并且第一个语句应为super.paintComponent(g),以确保清除面板的背景。感谢您的评论,但我不知道如何解决它?我以前没有使用过JavaSwing或任何图形库,所以您能在代码中解释一下吗@卡米克:没什么好解决的。问题不在于该方法被多次调用。问题是你的画没有达到你的预期。我们不知道你希望这幅画做什么。实际上,我想画一个矩形,而不是一些数字。例如,在我的k[]]数组中,我有0和1,当它是1时,我想画一个大小为10x10的矩形,它从k数组中的原始x,y位置开始绘制。你能告诉我怎么做吗@Camickr基础数学。矩形x/y值不能是索引的值。您需要将I/j值乘以10,因为每个正方形的大小是10。