Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.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
尽管我使用writen frame.repaint()从循环中调用paintComponent()方法,但为什么仍观察到球的movemet import javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 类JAnimation实现ActionListener { JFrame框架; int x=40,y=40; 公共静态void main(字符串参数[]) { 新JAnimation().go(); } 公开作废go() { frame=新的JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button=新JButton(“单击开始动画”); addActionListener(这个); MyDrawPanel=新建MyDrawPanel(); frame.getContentPane().add(BorderLayout.SOUTH,按钮); frame.getContentPane().add(BorderLayout.CENTER,panel); 框架。设置尺寸(300300); frame.setVisible(true); } 已执行的公共无效操作(操作事件e1) { System.out.println(“印度”) 对于(int i=0;i_Java - Fatal编程技术网

尽管我使用writen frame.repaint()从循环中调用paintComponent()方法,但为什么仍观察到球的movemet import javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 类JAnimation实现ActionListener { JFrame框架; int x=40,y=40; 公共静态void main(字符串参数[]) { 新JAnimation().go(); } 公开作废go() { frame=新的JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button=新JButton(“单击开始动画”); addActionListener(这个); MyDrawPanel=新建MyDrawPanel(); frame.getContentPane().add(BorderLayout.SOUTH,按钮); frame.getContentPane().add(BorderLayout.CENTER,panel); 框架。设置尺寸(300300); frame.setVisible(true); } 已执行的公共无效操作(操作事件e1) { System.out.println(“印度”) 对于(int i=0;i

尽管我使用writen frame.repaint()从循环中调用paintComponent()方法,但为什么仍观察到球的movemet import javax.swing.*; 导入java.awt.*; 导入java.awt.event.*; 类JAnimation实现ActionListener { JFrame框架; int x=40,y=40; 公共静态void main(字符串参数[]) { 新JAnimation().go(); } 公开作废go() { frame=新的JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JButton button=新JButton(“单击开始动画”); addActionListener(这个); MyDrawPanel=新建MyDrawPanel(); frame.getContentPane().add(BorderLayout.SOUTH,按钮); frame.getContentPane().add(BorderLayout.CENTER,panel); 框架。设置尺寸(300300); frame.setVisible(true); } 已执行的公共无效操作(操作事件e1) { System.out.println(“印度”) 对于(int i=0;i,java,Java,您正在阻止EDT线程,因为该面板未更新。您冻结gui。您可以使用swing timer而不是线程在不阻止EDT的情况下为循环设置动画。请阅读 下面是一个例子 import javax.swing.*; import java.awt.*; import java.awt.event.*; class JAnimation implements ActionListener { JFrame frame; int x=40,y=40; public static void main(S

您正在阻止EDT线程,因为该面板未更新。您冻结gui。您可以使用swing timer而不是线程在不阻止EDT的情况下为循环设置动画。请阅读

下面是一个例子

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

import java.awt.event.*;

class JAnimation implements ActionListener

{

JFrame frame;

int x=40,y=40;

public static void main(String args[])

{

new JAnimation().go(); 

}

 public void go()

 {

  frame=new JFrame();

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  JButton button=new JButton("CLICK TO START ANIMATION");

  button.addActionListener(this);

  MyDrawPanel panel=new MyDrawPanel();

  frame.getContentPane().add(BorderLayout.SOUTH,button);

  frame.getContentPane().add(BorderLayout.CENTER,panel);

  frame.setSize(300,300);

  frame.setVisible(true);

 }

  public void actionPerformed(ActionEvent e1)

  {

  System.out.println("INDIA")

  for(int i=0;i<130;i++)

  {

    x++;

    y++; 

    frame.repaint();

    try

   {

    Thread.sleep(50);

   }

   catch(Exception e)

   {

    System.out.println(e);

   }

  }


}

class MyDrawPanel extends JPanel

{

 public void paintComponent(Graphics g1)

 {

  System.out.println("HII");

  Graphics2D g2=(Graphics2D)g1;

  g2.setColor(Color.white);

  g2.fillOval(0,0,this.getWidth(),this.getHeight());

  g2.setColor(Color.green);

  g2.fillOval(x,y,70,70);

  System.out.println(x);

 }

}
}

由于该面板未更新,您正在阻止EDT线程。您可以冻结gui。您可以使用swing timer而不是thread在不阻止EDT的情况下为循环设置动画。读取

下面是一个例子

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

import java.awt.event.*;

class JAnimation implements ActionListener

{

JFrame frame;

int x=40,y=40;

public static void main(String args[])

{

new JAnimation().go(); 

}

 public void go()

 {

  frame=new JFrame();

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  JButton button=new JButton("CLICK TO START ANIMATION");

  button.addActionListener(this);

  MyDrawPanel panel=new MyDrawPanel();

  frame.getContentPane().add(BorderLayout.SOUTH,button);

  frame.getContentPane().add(BorderLayout.CENTER,panel);

  frame.setSize(300,300);

  frame.setVisible(true);

 }

  public void actionPerformed(ActionEvent e1)

  {

  System.out.println("INDIA")

  for(int i=0;i<130;i++)

  {

    x++;

    y++; 

    frame.repaint();

    try

   {

    Thread.sleep(50);

   }

   catch(Exception e)

   {

    System.out.println(e);

   }

  }


}

class MyDrawPanel extends JPanel

{

 public void paintComponent(Graphics g1)

 {

  System.out.println("HII");

  Graphics2D g2=(Graphics2D)g1;

  g2.setColor(Color.white);

  g2.fillOval(0,0,this.getWidth(),this.getHeight());

  g2.setColor(Color.green);

  g2.fillOval(x,y,70,70);

  System.out.println(x);

 }

}
}

抱歉..为什么没有观察到球的移动..您可以使用摆动计时器。您正在修改建议:编辑您的问题以修复标题以及代码的间距/格式。您可能还想添加一些关于您面临的问题的更多描述,例如,您预期会发生什么以及会发生什么。这将鼓励更多的人尝试并帮助你。一般来说:你在问题上投入的精力越多,人们在回答问题上投入的精力就越多。对不起……为什么没有观察到球的运动。?你可以使用摆动计时器。你正在尝试建议:编辑你的问题以修复标题以及代码的间距/格式。你可以可能还需要对您面临的问题进行更多描述,例如,您预期会发生什么以及会发生什么。这将鼓励更多的人尝试帮助您。一般来说:您在问题上投入的精力越多,人们在尝试回答问题上投入的精力就越多。这是一个很好的答案。基本问题是您正在从事件调度线程(EDT)调用重新绘制。在actionPerformed方法退出之前,它无法执行。在此解决方案中,快速动作侦听器的多个实例会每隔一段时间放入事件调度队列。请参阅文档了解更多信息和其他可能的解决方案。@kushagra我不明白?您也可以使用线程,但不能使用l类似于此,您必须从edt更新guithread@kushagra阅读这篇文章和这篇文章,先生,我没有掌握关于edt的概念。实际上我是java初学者。你能解释一下上面的代码吗?请帮助我,先生。@kushagra你称之为
thread.sleep(50)
所以更新gui的EDT线程睡眠50毫秒。那么谁在更新它?没有人。因为你的帧看起来冻结。如果你尝试调整帧大小,你将看不到任何更新。即使你移动球直到EDT重新绘制球,你也看不到它在移动。这是一个很好的答案。基本的问题是你正在调用它从事件分派线程(EDT)重新绘制。在actionPerformed方法退出之前,它无法执行。在此解决方案中,快速动作侦听器的多个实例会每隔一段时间放入事件调度队列。请参阅文档了解更多信息和其他可能的解决方案。@kushagra我不明白?您也可以使用线程,但不能使用l类似于此,您必须从edt更新guithread@kushagra阅读这篇文章和这篇文章,先生,我没有掌握关于edt的概念。实际上我是java初学者。你能解释一下上面的代码吗?请帮助我,先生。@kushagra你称之为
thread.sleep(50)
所以更新gui的EDT线程睡眠50毫秒。那么谁在更新它?没有人。因为你的帧看起来冻结。如果你尝试调整帧大小,你将看不到任何更新。即使你移动球,直到EDT重新绘制球,你也看不到它在移动。