从另一个绘制矩形 Class
Drawing Rectangle From Another Class
我正在创建一个简单的 Java2D 程序。它应该从另一个 class 绘制矩形,但它不起作用。如果你们中的一个人能花点时间看看我哪里出错了,我将不胜感激。这是我明天交的最后一个作业。
这是我目前使用的代码:
Block.java
public class Block extends JPanel {
public Graphics2D g;
protected int posX = 0;
protected int posY = 0;
protected int w = 100;
protected int h = 100;
public void draw() {
g.setColor(Color.GREEN);
g.fillRect(posX, posY, w, h);
}
}
这里是主要的class:
public class main {
private static final long serialVersionUID = 1L;
private Block[] pie = new Block[5];
Timer timer;
main() {
final JPanel screen = new JPanel() {
int x = 0;
int step = 10;
public void paintComponent(Graphics g) {
super.paintComponent(g);
pie[0].g = (Graphics2D) g;
pie[0].draw();
}
};
JFrame f = new JFrame("Test Lab");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setContentPane(screen);
f.pack();
f.setLocationByPlatform(true);
f.setResizable(false);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
new main();
}
});
}
}
非常感谢。
private Block[] pie = new Block[5];
您创建了一个大小为 5 的数组,但您还没有向该数组添加任何块,
pie[0].g = (Graphics2D) g;
pie[0].draw();
因此,当您尝试引用索引 0 处的对象时,您会遇到 NPE。
所以在你的构造函数的开头你可以添加:
pie[0] = new Block();
此外,您的绘制方法应定义如下:
public void draw(Graphics g)
那么在你的绘画代码中你会使用:
pie[0].draw(g);
也就是说,您不需要在 Block 中存储 Graphics 对象 class。将 Graphics 对象传递给方法。
我正在创建一个简单的 Java2D 程序。它应该从另一个 class 绘制矩形,但它不起作用。如果你们中的一个人能花点时间看看我哪里出错了,我将不胜感激。这是我明天交的最后一个作业。
这是我目前使用的代码:
Block.java
public class Block extends JPanel {
public Graphics2D g;
protected int posX = 0;
protected int posY = 0;
protected int w = 100;
protected int h = 100;
public void draw() {
g.setColor(Color.GREEN);
g.fillRect(posX, posY, w, h);
}
}
这里是主要的class:
public class main {
private static final long serialVersionUID = 1L;
private Block[] pie = new Block[5];
Timer timer;
main() {
final JPanel screen = new JPanel() {
int x = 0;
int step = 10;
public void paintComponent(Graphics g) {
super.paintComponent(g);
pie[0].g = (Graphics2D) g;
pie[0].draw();
}
};
JFrame f = new JFrame("Test Lab");
f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
f.setContentPane(screen);
f.pack();
f.setLocationByPlatform(true);
f.setResizable(false);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable(){
public void run(){
new main();
}
});
}
}
非常感谢。
private Block[] pie = new Block[5];
您创建了一个大小为 5 的数组,但您还没有向该数组添加任何块,
pie[0].g = (Graphics2D) g;
pie[0].draw();
因此,当您尝试引用索引 0 处的对象时,您会遇到 NPE。
所以在你的构造函数的开头你可以添加:
pie[0] = new Block();
此外,您的绘制方法应定义如下:
public void draw(Graphics g)
那么在你的绘画代码中你会使用:
pie[0].draw(g);
也就是说,您不需要在 Block 中存储 Graphics 对象 class。将 Graphics 对象传递给方法。