2012-05-22 26 views
3

感謝您檢查這個問題。我想我只是在挫折中抓住了我的頭骨。 所以我得到的是一個包含'JPanel'的'JFrame'。 'JPanel'包含一個小彩色正方形,當我點擊窗口時應該移動X個像素。這個廣場我動畫是留下一個痕跡,任何人都可以解決原因?

好吧,基本上所有的行爲都應該如此,只有一個例外。當藍色方塊向右移動時,它會在其後面留下其他方塊的痕跡。然而,當我重新調整窗戶的大小時,它不應該離開小路,路徑消失。

Catalyst.java

package Prototype; 

import java.awt.*; 

public class Catalyst { 

public static void main(String[] args){ 
    World theWorldInstance = new World("Prototype", 100,100, 600,100); /*title,xpos,ypos,width,height*/ 
} 

} 

World.java

package Prototype; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class World extends JFrame { 

Level mainPanel;  

public World(String title, int x, int y, int width, int height) { 

    setTitle(title); 
    setBounds(x,y,width,height); 
    setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
    setBackground(new Color(0x00000000)); 
    initLevel(); 

} 

public void initLevel(){ 
    mainPanel = new Level(); 
    Container visibleArea = getContentPane(); 
    visibleArea.add(mainPanel); 
    setVisible(true); 
    add(mainPanel); 
} 



} 

Level.java

package Prototype; 

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 

public class Level extends JPanel implements MouseListener, ActionListener { 
Square x; 


public Level() { 
    System.out.println("This is working correctly[JPANEL Cons]"); 
    addMouseListener(this); 
    x = new Square(); 
} 

public void paintComponent(Graphics g){ 
    x.draw(g); 
} 

public void actionPerformed(ActionEvent e){ 
} 

public void mousePressed(MouseEvent e){ 
    requestFocus(); 
    x.move(); 
    repaint(); 
    System.out.println("Focus Acquired"); 


} 

public void mouseClicked(MouseEvent e) {} 
public void mouseReleased(MouseEvent e) {} 
public void mouseExited(MouseEvent e) {} 
public void mouseEntered(MouseEvent e) {} 
} 

Square.java

package Prototype; 

import java.awt.*; 

public class Square { 

private Point position; 
private int size; 
private final int displacement; 

public Square(){ 
    position = new Point(10,10); 
    size = 20; 
    displacement = 5; 

} 

public void draw(Graphics g){ 
    g.setColor(Color.blue); 
    g.fillRect(position.x-(size/2), position.y-(size/2), size,size); 
    g.setColor(Color.black); 
    g.drawRect(position.x-(size/2), position.y-(size/2), size,size); 

} 

public void move() { 
    position.x += displacement; 
} 
} 

這些都是我的文件。我希望我已經正確表達了所有內容並提供了所需的全部內容。每當我在過去做過類似的事情時,從未發生過。我認爲我錯過了一些小事,或者我做了一些愚蠢的事情。如果你能幫助我,請提前致謝!

回答

3

還有另外一種方法。您可以簡單地調用父對象的paintComponent方法來清除面板。

這級別添加到您的構造函數:

this.setBackground(Color.BLACK); 

而且本作中的paintComponent第一個電話:

super.paintComponent(g); 
+0

Ahha,這很有趣,不知道這件事,或者你可以說永遠不會嘗試它:-) +1雖然 –

+0

美麗。簡單而優雅。謝謝。 – yoonsi

+0

不能信任它,我在Swing教程的某個地方瞭解到了它 - 多年來爲我節省了一堆麻煩。 – Ewald

3

您可以使用g.clearRect(x, y, width, height),並提供上述座標,您希望從中清除繪畫。或者你可以給你繪製的整個JPanel/JComponent的尺寸,儘管這樣做會記住一件事,即所述繪圖不是一項繁重的工作,否則太多的清潔會給繪畫要求帶來額外的負擔。

+0

謝謝你的提示我的朋友。但是,我只是意識到我正在將我的繪畫直接放到裸露的JPanel上。如果我添加一張背景圖片或一個包含黑色矩形的圖片,那麼問題就解決了:D我很欣賞你的時間。 – yoonsi

+0

你是最歡迎和保持微笑:-),在這裏看這個線程,所有這個東西的美妙工作示例[球動畫](http://stackoverflow.com/a/9852739/1057230) –

+0

偉大的鏈接@nIcEcOw – Ewald

相關問題