3

この質問をチェックしていただきありがとうございます。欲求不満で頭蓋骨を引っかいたところだと思います。だから私が持っているのは「JPanel」を含む「JFrame」です。「JPanel」には、ウィンドウをクリックするたびにXピクセル移動するはずの小さな色付きの正方形が含まれています。

ええと、1つの例外を除いて、基本的にすべてが正常に動作します。青い四角が右に移動すると、その後ろに他の四角の跡が残ります。トレイルを離れることは想定されていませんが、ウィンドウのサイズを変更すると、トレイルが消えます。

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;
}
}

これらはすべて私のファイルです。すべてを適切に表現し、必要なすべてのコンテンツを提供したことを願っています。私が過去に同じようなことをしたときはいつでも、これは決して起こりませんでした。私は何か小さなものが欠けているか、何か愚かなことをしたと思います。よろしければ、よろしくお願いします!

4

2 に答える 2

3

g.clearRect(x、y、width、height)を使用して、ペイントをクリアする場所に上記の座標を指定できます。または、描画している場所全体の寸法を指定することもできJPanel/JComponentますが、これを行う場合は、この描画は手間がかからないことを念頭に置いてください。そうしないと、クリーニングが多すぎると、ペイントの呼び出しに余分な負担がかかります。

于 2012-05-22T06:03:04.633 に答える
3

これを行う別の方法があります。親オブジェクトのpaintComponentメソッドを呼び出すだけで、パネルをクリアできます。

これをレベルのコンストラクターに追加します:

this.setBackground(Color.BLACK);

そしてこれはpaintComponentの最初の呼び出しとして:

super.paintComponent(g);
于 2012-05-22T06:12:39.907 に答える