//①请问如何用键盘事件控制开始画图,如何实现??
//②paint(),repaint()无法放到另外一个方法中吗?(我测试时报错)import java.awt.*;
import java.awt.event.*;class TestFrame extends Frame
{
int i=0;
public void paint(Graphics g)
{
i=i+40;
Color c=g.getColor();
g.setColor(Color.green);
g.fillRect(i,i,40,40);
g.setColor(c);
try
{
Thread.sleep(600);
}
catch(Exception e)
{
e.printStackTrace();
}
//update(g);
repaint();
}
public void update(Graphics g) //重写update()方法,只清除原来正方形的1/2。
{
g.clearRect(i,i,20,20);
paint(g);
}
}class Test
{
public static void main(String[] args)
{
TestFrame tf=new TestFrame();
Toolkit tool=tf.getToolkit();
Dimension dim=tool.getScreenSize();
tf.setBounds(0,0,(int)((dim.width)/1.8),dim.height);
tf.setVisible(true);
tf.addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{
//tf.setVisible(false);
System.exit(0);
}
});
tf.addKeyListener(new Monitor());
}
}class Monitor extends KeyAdapter //当按下Enter键时在后台命令提示符打印"Enter",
{ //但我本意是要按下Enter时才开始在窗口画图,请求指教,谢谢!!
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
System.out.println("Enter");
}
}
//②paint(),repaint()无法放到另外一个方法中吗?(我测试时报错)import java.awt.*;
import java.awt.event.*;class TestFrame extends Frame
{
int i=0;
public void paint(Graphics g)
{
i=i+40;
Color c=g.getColor();
g.setColor(Color.green);
g.fillRect(i,i,40,40);
g.setColor(c);
try
{
Thread.sleep(600);
}
catch(Exception e)
{
e.printStackTrace();
}
//update(g);
repaint();
}
public void update(Graphics g) //重写update()方法,只清除原来正方形的1/2。
{
g.clearRect(i,i,20,20);
paint(g);
}
}class Test
{
public static void main(String[] args)
{
TestFrame tf=new TestFrame();
Toolkit tool=tf.getToolkit();
Dimension dim=tool.getScreenSize();
tf.setBounds(0,0,(int)((dim.width)/1.8),dim.height);
tf.setVisible(true);
tf.addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{
//tf.setVisible(false);
System.exit(0);
}
});
tf.addKeyListener(new Monitor());
}
}class Monitor extends KeyAdapter //当按下Enter键时在后台命令提示符打印"Enter",
{ //但我本意是要按下Enter时才开始在窗口画图,请求指教,谢谢!!
public void keyPressed(KeyEvent e)
{
if(e.getKeyCode()==KeyEvent.VK_ENTER)
System.out.println("Enter");
}
}
解决方案 »
- 有没有其他技术可以替代socket技术
- 医院装修费用系统设计
- classLoader.getResources怎么不能返回资源?
- 为什么适配器模式要用抽象类
- 关于二叉树的中根次序遍历中序线索二叉树
- arrayList<Ball>? 什么意思 有人知道吗?
- 很简单的几个题,请教下各位大哥
- 请问(seconds - 15) / 60 * 2 * Math.PI;和2 * Math.PI*(seconds - 15) / 60有区别吗?
- java如何实现屏幕抓取,图象压缩???
- java登录界面,编译器没报错,但数据库里的用户密码输进去却跳出来的总是错误的对话框
- 小弟请求关于java包的问题
- java 父类与子类 构造器问题??
import java.awt.*;
import java.awt.event.*;class TestFrame extends Frame implements KeyListener
{
/**
* 〈一句话功能简述〉
*/
private static final long serialVersionUID = 1L;
int i = 0;
private boolean start = false;
public void paint(Graphics g)
{
i = i + 40;
Color c = g.getColor();
g.setColor(Color.green);
g.fillRect(i, i, 40, 40);
g.setColor(c);
try
{
Thread.sleep(600);
}
catch (Exception e)
{
e.printStackTrace();
}
repaint();
}
public void update(Graphics g) //重写update()方法,只清除原来正方形的1/2。
{
if (start)
{
g.clearRect(i, i, 20, 20);
paint(g);
}
}
@Override
public void keyTyped(KeyEvent e)
{
}
@Override
public void keyReleased(KeyEvent e)
{
}
@Override
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
start = true;
System.out.println("Enter");
}
}
}public class Test
{
public static void main(String[] args)
{
TestFrame tf = new TestFrame();
Toolkit tool = tf.getToolkit();
Dimension dim = tool.getScreenSize();
tf.setBounds(0, 0, (int)((dim.width) / 1.8), dim.height);
tf.setVisible(true);
tf.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
//tf.setVisible(false);
System.exit(0);
}
});
tf.addKeyListener(tf);
}
}
你可以这样,按键的时候,调用repaint()方法
①应该在paint()方法中也加一个if(start)语句;
②在update()方法中还应该调用repaint()方法。注:这是一个很简单的小程序,希望可以帮助大家理解paint(),repaint()和update()之间的关系;
整理后的代码如下,可运行。希望大家多多指点,谢谢!
import java.awt.*;
import java.awt.event.*;class TestFrame extends Frame implements KeyListener
{
int i = 0;
private boolean start = false;
public void paint(Graphics g)
{
if(start)
{
i = i + 40;
Color c = g.getColor();
g.setColor(Color.green);
g.fillRect(i, i, 40, 40);
g.setColor(c);
try
{
Thread.sleep(600);
}
catch (Exception e)
{
e.printStackTrace();
}
repaint();
}
}
public void update(Graphics g) //重写update()方法,只清除原来正方形的1/4。
{
if (start)
{
g.clearRect(i, i, 20, 20);
paint(g);
}
}
public void keyPressed(KeyEvent e)
{
if (e.getKeyCode() == KeyEvent.VK_ENTER)
{
start = true;
repaint();
}
}
public void keyTyped(KeyEvent e){}
public void keyReleased(KeyEvent e){}
}public class Test
{
public static void main(String[] args)
{
TestFrame tf = new TestFrame();
Label label=new Label("按Enter键开始自动画图!");
label.setBackground(Color.red);
tf.add(label,"North");
Toolkit tool = tf.getToolkit();
Dimension dim = tool.getScreenSize();
tf.setBounds(0, 0, (int)((dim.width) / 1.8), dim.height);
tf.setVisible(true);
tf.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
tf.addKeyListener(tf);
}
}