各位程式員好,
我在我的代碼中遇到了一個我似乎無法破解的小問題。它與Jframe有關;Java的圖形區域。我將在下面發布的代碼是關于繪圖方法的。其目的是繪制位于另一個類中的ArrayList 中的“房間” 。這種偏離路線不會發生,因此在這里發帖。roomListlvl.
public class LevelGUI implements Observer {
private Level lv;
private Display d;
public LevelGUI(Level level, String name) {
this.lv = level;
JFrame frame = new JFrame(name);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
d = new Display(lv, 500, 500);
frame.getContentPane().add(d);
frame.pack();
frame.setLocation(0, 0);
frame.setVisible(true);
}
private class Display extends JPanel {
public Display(Level fp, int x, int y) {
addKeyListener(new Listener());
setBackground(Color.GRAY);
setPreferredSize(new Dimension(x 20, y 20));
setFocusable(true);
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
draw(g);
}
private void draw(Graphics g) {
Level lvl = new Level();
for(int i = 0; i < lvl.roomList.size(); i ) {
Room room = lvl.roomList.get(i);
g.setColor(room.floorColor);
g.drawRect(room.posX, room.posY, room.roomWidth, room.roomHeight);
}
}
}
}
獲取有關該程式的一些背景資訊。roomList是ArrayList,它充滿了各種不同大小和顏色的房間。房間本身就是物件。
頭等艙來Level 了:
public class Level extends Observable {
private boolean Switch = true;
public ArrayList<Room> roomList = new ArrayList<Room>();
(...)
}
這是用于創建房間的類。 Room()
public class Room {
Color floorColor;
int roomWidth;
int roomHeight;
int posX;
int posY;
public Room(int dx, int dy, Color color) {
this.floorColor = color;
this.roomHeight = dy;
this.roomWidth = dx;
this.posY = 0;
this.posX = 0;
}
(...)
}
我已經設法找到問題發生的位置,它是for-loop中的代碼。我嘗試切換整數roomList.size()來測驗它是否是回圈。但事實并非如此。可以在for-loop之外繪制圖形。
再一次,問題不是錯誤訊息,程式根本沒有繪制我指示它在方法 draw()中繪制的房間。
顯示輸出如下所示:

預先感謝!
uj5u.com熱心網友回復:
請注意,只要框架認為組件需要在螢屏上呈現,Swing 就會呼叫 paintComponent() 方法。這通常是當視窗變得可見時 - 最初或因為某些其他視窗不再隱藏組件。此類事件超出您的控制范圍。
所以你的應用程式應該創建一個狀態并準備好隨時繪制它。因此,您不會在 paint() 或 paintComponent() 方法中創建狀態(如關卡)。把它放在其他地方——如果需要的話,放在建構式中。
查看您的代碼:當您在paintComponent()/draw() 中創建一個新關卡時,假設該關卡沒有關聯的房間是否正確?在這種情況下,該方法無需繪制任何內容即可回傳。
如果您的應用程式認為應該更新螢屏,請呼叫 repaint(),因為框架很快就會呼叫 paint() 方法。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/429898.html
上一篇:如何修改外觀系統類,例如com.sun.java.swing.plaf.windows.WindowsTableHeaderUI
