이 질문을 확인해 주셔서 감사합니다. 나는 좌절감으로 내 두개골을 긁어 본 것 같아. 그래서 '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;
}
}
,174,
모두 내 파일입니다. 나는 모든 것을 올바르게 표현하고 필요한 모든 내용을 제공했기를 바랍니다. 내가 과거에 비슷한 것을했을 때마다 이것은 결코 일어난 적이 없다. 나는 작은 것을 놓치고 있다고 생각하거나, 어리석은 짓을했습니다. 당신이 나를 도울 수 있다면, 미리 감사드립니다!
Ahha, 흥미로운 것은이 물건에 대해 몰랐거나 결코 시도하지 않았다고 말할 수 있습니다 :-) +1 –
Beautiful. 간단하고 우아한. 고맙습니다. – yoonsi
스윙 튜토리얼 어딘가에 대해 배웠다. 수년 동안 두통이 번뜩하게했다. – Ewald