尝试使用paint创建一个矩形但重绘方法不调用paint方法。
甚至尝试用paintComponent替换paint,但仍然无效。 那么要做些什么改变才能使其发挥作用。 在运行中调用重绘方法有问题。
该实例存在问题。
尝试使用paint创建一个矩形但重绘方法不调用paint方法。
甚至尝试用paintComponent替换paint,但仍然无效。 那么要做些什么改变才能使其发挥作用。 在运行中调用重绘方法有问题。
该实例存在问题。
package src;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
public class main extends JFrame implements Runnable{
private final int Height = 480;
private final int Width = 640;
Thread gameloop;
public static main instance = null;
private main(){
JFrame frame = new JFrame();
frame.setSize(this.Width,this.Height);
frame.setVisible(true);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static main getInstance(){
if (instance == null){
instance = new main();}
return instance;
}
private void start(){
gameloop = new Thread(this);
gameloop.start();
}
@Override
public void paint(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(g2d.getBackground());
g2d.fillRect(0, 0, instance.Width, instance.Height);
g2d.setColor(Color.red);
g2d.fillRect(0, 0, 50, 50);
}
@Override
public void run() {
Thread current = Thread.currentThread();
while (gameloop == current){
try{
Thread.sleep(5);
}
catch (InterruptedException e){
e.printStackTrace();
}
repaint();
}
}
public static void main(String[] args){
main.getInstance();
main.getInstance().start();
}
}
答案 0 :(得分:0)
最初的问题是你在构造函数中创建了一个新的JFrame然后使其可见,而不是使用你刚创建的main
实例,所以main
类中没有任何内容实际显示在你的应用程序中,只是一个什么都不做的空白JFrame。你的run
循环也毫无意义。
但是,您的代码在逻辑和样式方面都存在很多的其他问题。我建议你重构一切。这是一个更清洁的版本,也可以解决您的问题。
package src;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import javax.swing.JFrame;
public final class Main extends JFrame implements Runnable {
private volatile boolean running;
private Main(int width, int height) {
setSize(width, height);
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
private void start() {
running = true;
new Thread(this).start();
}
private void stop() {
running = false;
}
@Override
public void paintComponent(Graphics g){
Graphics2D g2d = (Graphics2D) g;
g2d.setColor(g2d.getBackground());
g2d.fillRect(0, 0, getWidth(), getHeight());
g2d.setColor(Color.red);
g2d.fillRect(0, 0, 50, 50);
}
@Override
public void run() {
while (running) {
try {
Thread.sleep(40);
}
catch (InterruptedException e){
e.printStackTrace();
}
repaint();
}
}
public static void main(String[] args) {
new Main(640, 480).start();
}
}