繁体   English   中英

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

[英]How do I pass an array as parameter to a Java graphics function?

我目前正在尝试将布尔数组从另一个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函数接受数组的值?

首先看一下在AWT和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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM