如何将数组作为参数传递给Java图形函数?

时间:2019-02-28 00:15:22

标签: java graphics parameters

我目前正在尝试将布尔数组从另一个java类传递给我的paint函数,目前它已经很好地传递给了下面的Draw函数。但是,我无法从“绘画”功能访问它。

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

public class Draw extends JPanel{

public static void Draw(boolean[] array){
    JFrame f = new JFrame ("Program");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setSize(1200, 1000);
    f.setLocation(400, 30);
    f.setVisible(true);
    f.getContentPane().add(new Draw());
}

public void paint (Graphics g){

super.paint(g);
g.setColor(Color.black);

 for(int i = 0; i < array.length; i++){
           if (array[i]){
          g.drawLine(i, i, i, i);
 //I know the line above draws a diagonal line, will fix it later! 

               }
           }
}

我想做的只是使用数组作为这样的参数:

public void paint (Graphics g, boolean[] array){

super.paint(g);
g.setColor(Color.black);

 for(int i = 0; i < array.length; i++){
           if (array[i]){
          g.drawLine(i, i, i, i);

               }
           }
}

但这是行不通的,如果我尝试直接将数组传递给其他类进行绘制,则该行将不起作用,因为其中一个是静态的,而另一个则不是。我尝试在整个Google上进行搜索,但是这些解决方案似乎都无效。所以我的问题是我将如何使paint函数接受数组的值?

1 个答案:

答案 0 :(得分:1)

首先查看Performing Custom PaintingPainting in AWT and Swing,以更好地了解绘画系统在Swing中的工作方式。

paint方法是挂钩,绘制系统通过这些挂钩要求您的组件重新绘制自身,您不能更改签名并希望它将被调用。

相反,您需要实现这些挂钩之一(最好为paintComponent),并且在调用它们时,调用您需要的任何其他方法以绘制组件的当前状态。

首先定义要用作实例字段的数组,然后在paint方法中,简单地引用它并执行所需的操作...

public class Draw extends JPanel{
    // Instance field, demonstration, so it won't generate a NPE
    private boolean[] array = new boolean[0];
    @Override
    protected void paintComponent(Graphics g){    
        paintComponent(g);
        g.setColor(Color.black);

        for(int i = 0; i < array.length; i++){
            if (array[i]){
                g.drawLine(i, i, i, i);
            }
        }
    }

显然,这只是一个“基本”概念,您将需要定义使用所需值更新array的功能,该功能可以根据需要通过构造函数或setter传递。

当您要绘画系统更新组件时,只需在要更新的实例上调用repaint