Swingのrepaintについて
2026 ワード
1つのJFrameを直接repaintすると、画面が点滅したり、画面が表示されないという問題が発生します
次のコード
表示内容を更新する場合は、Frameを直接更新するのではなく、JFrameにJPanelを追加してJPanelを更新します.
次のコード
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class S2P11 extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
final int WIDTH = 900, HEIGHT = 650;
double p1Speed = .5, p2Speed = .5;
/************************************************/
final int UP = 0, RIGHT = 1, DOWN = 2, LEFT = 3;
int p1Direction = UP;
int p2Direction = UP;
/************************************************/
Rectangle p2 = new Rectangle(WIDTH/9 + (int)(WIDTH/9*1.5/2), (HEIGHT/2) + (HEIGHT/10), WIDTH/30, WIDTH/30);
Rectangle p1 = new Rectangle(WIDTH/9, HEIGHT/2, WIDTH/30, WIDTH/30);
public S2P11() {
super("Radical Racing");
setSize(WIDTH/9*10, HEIGHT/9*10);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
new Thread()
{
public void run() {while(true)
{
while(true)
{
repaint();
p2.y+=10;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}};
}.start();
}
public void paint(Graphics g){
super.paint(g);
Graphics2D g2d=(Graphics2D)g;
g2d.setColor(Color.DARK_GRAY);
g2d.fillRect(0, 0, WIDTH, HEIGHT);
g2d.setColor(Color.red);
g2d.fill3DRect(p2.x, p2.y, p2.width, p2.height,true);
}
/************************************************/
public static void main(String[] args) {
new S2P11();
}
}
表示内容を更新する場合は、Frameを直接更新するのではなく、JFrameにJPanelを追加してJPanelを更新します.