我目前正在尝试将布尔数组从另一个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函数接受数组的值?
答案 0 :(得分:1)
首先查看Performing Custom Painting和Painting 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