為什么即使我在回圈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);
}
}
uj5u.com熱心網友回復:
即使您repaint()多次呼叫,實際繪圖也只會在以后發生一次(直到搖擺會再次觸發重繪)。此時,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()在控制器中執行該方法時,您將計算所有要繪制的矩形并將它們保存在類的this.rectangles陣列/串列中Model。之后,paintComponent()方法填充使用該陣列/串列并繪制矩形。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/473178.html
