Java Paint 组件不工作

标签 java swing graphics paint

这是代码,正方形会渲染但不会移动,即使它应该渲染每个循环。问题似乎出在 Core 类的 run() 中

    package com.game;

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

public class Core implements Runnable{
    private static boolean running = true;
    public static JFrame frame = new JFrame();
    public static void main(String[] args) {
        frame.setResizable(false);
        frame.setBounds(100,100,600,400);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
        start();
    }





package com.game;

import java.awt.Graphics;

import javax.swing.JPanel;

public class Paint extends JPanel{
    public static int x = 10;
    public void paintComponent(Graphics g){
        super.paintComponent(g);

        g.fillRect(x,10,100,100);
    }
}


        private static void start() {
            running = true;
            Thread thread = new Thread(new Core());
            thread.setPriority(Thread.MAX_PRIORITY);
            thread.start();
        }

        @Override
        public void run() {
            Paint p = new Paint();
            Container pane = frame.getContentPane();
            while(running){
                pane.add(p);
                pane.show();

                System.out.println(Paint.x);
            try {
                Thread.sleep(100);
            } catch (Exception e){}
        }
        }
    }

抱歉,如果代码在任何方面都很烦人,我不知道应该如何格式化它......

最佳答案

您正在while(运行)循环:

while(running){
   pane.add(p);
   pane.show();
   //....
}

正在踩住 Swing 事件线程并阻止该线程执行其操作 - 绘制 GUI 并与用户交互。如果您希望在 Swing 应用程序中重复行为,请不要使用 while (true) 循环,而应使用 Swing 计时器。

关于Java Paint 组件不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10675311/

相关文章:

java - 我如何检查 joda-time 是给定日期的第一周,第二周,......还是一个月的最后一周?

java - 如何检查正则表达式以正则表达式开头和结尾

java - 字符串到 InetAddress 转换时出错

Java:并发速度比简单的 for 循环慢

java - Swing 对话框渐变绘制问题

java - 对 Graphics2D 对象进行 HitTest ?

Haskell:OpenGL,如何防止窗口立即关闭

java - 将元素添加到 HashSet 中

java - JPanel 未显示在另一个 JPanel 内

algorithm - 如何平滑 3D 体素世界的 block ?