Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么矩形不在框架上移动?_Java_Swing - Fatal编程技术网

Java 为什么矩形不在框架上移动?

Java 为什么矩形不在框架上移动?,java,swing,Java,Swing,我正在学习图形部分,当我理解了paintComponent方法的作用后,我尝试了这个方法。我试着画一个矩形,然后使用while循环,将它在框架上移动。但代码似乎没有运行。请注意,我是一个新手,我所做的只是一次尝试 import java.awt.*; import javax.swing.*; public class RightFlowLayout extends Panel{ public static void main(String[]args) {

我正在学习图形部分,当我理解了paintComponent方法的作用后,我尝试了这个方法。我试着画一个矩形,然后使用while循环,将它在框架上移动。但代码似乎没有运行。请注意,我是一个新手,我所做的只是一次尝试

import java.awt.*;

import javax.swing.*;


public class RightFlowLayout extends Panel{

    public static void main(String[]args)
    {
         JFrame frame=new JFrame("My");
         Panel panel=new Panel();

         frame.add(panel);
         frame.setSize(600, 600);
         frame.setVisible(true);

    }       

    }


class Panel extends JPanel{
    public int x=20;
    public int y=20;
    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        while(true)
        {

            g.fill3DRect(x, y, 50, 50, true);
            x+=5;
            y+=5;
        }
}

}

尝试使用,而不是无限循环

请看一看

以下是示例代码:

int delay = 1000; //milliseconds
ActionListener taskPerformer = new ActionListener() {
  public void actionPerformed(ActionEvent evt) {
      panel.repaint();
  }
};
Timer timer=new Timer(delay, taskPerformer);
timer.setRepeats(true);
timer.start();
找到一个


您正在像冠军一样阻止UI线程。很好的无限循环。删除那个while循环,看看会发生什么。谷歌“如何使用Swing定时器”来修复它。你需要创建一个辅助执行序列,并行,在编程中称为“线程”的概念。当原始线程(主线程、用户界面线程)继续在监视器上绘图时,辅助线程将更新X、Y值。编程不容易,学习曲线陡峭。如果你只是想解决这个问题以通过你的课程,只需遵循下面的答案。如果您想学习,那么是的,任何类型的严肃用户界面都使用多线程。