控制小球移动
1.外部类 实现KeyListener监听接口
package com.test3;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Demo9_4 extends JFrame{
MyPanel p1 = new MyPanel();
public Demo9_4(){
add(p1);
addKeyListener(p1);//写法
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Demo9_4();
}
}
@SuppressWarnings("serial")
class MyPanel extends JPanel implements KeyListener{//必须实现keylistener中的所有方法
int x = 5;
int y = 5;
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.fillOval(this.x, this.y, 10, 10);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN){
y+=5;
repaint();
}
}
@Override
public void keyReleased(KeyEvent e) {
}
}
2.匿名内部类写法
package com.test3;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
@SuppressWarnings("serial")
public class Demo9_4 extends JFrame{
MyPanel p1 = new MyPanel();
public Demo9_4(){
add(p1);
/**
* 匿名内部类
* 不能是p1.addKeyListener(new keyListner)
* 如果是监听按钮就可以这样写
* p1是面板,所以不能这样写? p1面板没有对应的出发时间类型? 不对啊 JPanel是Component的子类,可以触发事件类型啊?
*/
addKeyListener(new KeyAdapter() {
public void keyPressed(KeyEvent e) {
if(e.getKeyCode()==KeyEvent.VK_DOWN){
p1.setY(p1.getY()+5);
repaint();
}
}
});
setSize(400, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args) {
new Demo9_4();
}
}
@SuppressWarnings("serial")
class MyPanel extends JPanel {
int x = 5;
int y = 5;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
g.fillOval(this.x, this.y, 10, 10);
}
}