为什么这里只画了一个矩形?

  • 本文关键字:一个 这里 java swing frame
  • 更新时间 :
  • 英文 :


为什么只有一个矩形被画在这里,即使我调用repaint()方法多次在我的for()循环?此外,我想显示每行8个矩形和每列8个矩形,中间有2像素的空间。有什么想法或帮助吗?

package PROG2;
import java.awt.*;
import java.util.*;
import javax.swing.*;
class Model {

int m_width;
int m_height;
int m_x1 = 50;
int m_y1 = 50;      //Information about the model
int m_x2 = 100;
int m_y2 = 30;
int counter = 0;    //Assisting variable

Model(int width,int height) {
m_width = width;
m_height = height;
}
void math() {
counter = counter + 2;
counter = counter + m_x2;
m_x1 = counter;
}
}
class View extends JComponent {

private Model m_Mod;

View(Model mod) {
m_Mod = mod;
}
@Override
protected void paintComponent(Graphics g) {

//super.paintComponent(g);

g.setColor(Color.green);
g.drawRect(m_Mod.m_x1,m_Mod.m_y1,
m_Mod.m_x2,m_Mod.m_y2);
g.fillRect(m_Mod.m_x1,m_Mod.m_y1,
m_Mod.m_x2,m_Mod.m_y2);
}

}

class Controller {

private Model m_Mod;
private View m_View;

Controller(){
m_Mod = new Model(500,500);
m_View = new View(m_Mod);
JFrame frame = new JFrame();
frame.add(m_View);
frame.setSize(m_Mod.m_width,m_Mod.m_height);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Graphics g = frame.getGraphics();
}
void simulate(int right, int down){

for( int i = 0; i < right; i++) {
m_Mod.math();
m_View.repaint();
}

}

}

class Übung2{

public static void main(String[] args) throws Exception {
Controller c = new Controller();    
c.simulate(8, 8);
}

}

即使多次调用repaint(),实际绘图也只会在稍后的时间发生一次(直到swing再次触发重绘)。此时,执行paintComponent()方法的内容。你在方法中的代码只绘制一个矩形(drawRect())和一个填充矩形(fillRect()),仅此而已。所以你不会得到比你在方法中写的更多的东西。

你可以使用数组(或列表)来存储你的矩形的多个XY坐标,然后迭代数组/列表来绘制多个矩形,而在paintComponent()的单个调用中。代码看起来像这样:

@Override
protected void paintComponent(Graphics g) {
//super.paintComponent(g);

g.setColor(Color.green);
foreach (RectModel rect: m_Mod.getRectangles()) {
g.drawRect(rect.x1, rect.y1, rect.x2, rect.y2);
}
}

假设你有这样一个类RectModel,它保存一个矩形(x1,y1,x2,y2)的数据,你有一个方法m_Mod.getRectangles(),它返回RectModel实例的数组/列表。当你在控制器中执行simulate()方法时,你将计算你想要绘制的所有矩形并将它们保存在Model类的this.rectangles数组/列表中。之后,paintComponent()方法填充使用该数组/列表并绘制矩形。

相关内容

  • 没有找到相关文章

最新更新