您的位置:首页 > 其它

关于窗口与按钮焦点引起的KeyListnere失效的问题

2015-04-29 21:53 253 查看

package homework;

import java.awt.Button;

import java.awt.Color;

import java.awt.FlowLayout;

import java.awt.Frame;

import java.awt.Graphics;

import java.awt.GraphicsDevice;

import java.awt.GraphicsEnvironment;

import java.awt.Image;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.awt.event.MouseListener;

import java.awt.event.WindowAdapter;

import java.awt.event.WindowEvent;

import java.util.ArrayList;

import javax.swing.JFrame;

public class MyFrame extends Frame{

ArrayList<Ball> balls = new ArrayList<Ball>();

public static final int HEIGHT = 768 /2;

public static final int WIDTH = 1366 /2;

double x,y;

int countBall = 0;

Image offScreenImage = null;

// Image img = GameUtil.getImage("imgs/GEM.jpg");

public static void main(String[] args) {

MyFrame mf = new MyFrame();

mf.start(mf);

}

public void start(MyFrame mf) {

// 不显示栏

// this.setUndecorated(true);

Ball ball = new Ball(0, 0);

balls.add(ball);

this.setSize(WIDTH, HEIGHT);

this.setTitle("模拟屏保");

this.setResizable(false);

this.setVisible(true);

this.setLayout(new FlowLayout());

Button button1 = new Button("+");

Button button2 = new Button("-");

this.add(button1);

this.add(button2);

button1.setFocusable(false);

button2.setFocusable(false);

// 全屏

// GraphicsDevice myDevice =

GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

// myDevice.setFullScreenWindow(this);

MyFrame.this.requestFocus();

this.addKeyListener(new KeyAdapter() {

@Override

public void keyPressed(KeyEvent e) {

System.out.println("a Key was Pressed ! ");

// System.exit(0);

}

});

button1.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

if(countBall <= 20) {

x = (WIDTH*3/4) * Math.random();

y = (HEIGHT*3/4) * Math.random();

balls.add(new Ball(x, y));

countBall ++;

}

// MyFrame.this.requestFocus();

}

});

button2.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

if(countBall >= 0) {

balls.remove(countBall);

countBall --;

}

// MyFrame.this.requestFocus();

}

});

new Thread(new PaintThread()).start();

this.addWindowListener(new WindowAdapter() {

@Override

public void windowClosing(WindowEvent e) {

System.exit(0);

}

});

}

public void update(Graphics g) {

if(offScreenImage == null) {

offScreenImage = this.createImage(WIDTH, HEIGHT);

}

Graphics gOffScreen = offScreenImage.getGraphics();

Color c = gOffScreen.getColor();

gOffScreen.setColor(Color.WHITE);

gOffScreen.fillRect(0, 0, WIDTH, HEIGHT);

gOffScreen.setColor(c);

paint(gOffScreen);

g.drawImage(offScreenImage, 0, 0, null);

}

@Override

public void paint(Graphics g) {

// g.drawImage(img, 0, 0, null);

for(int i=0; i<balls.size(); i++) {

Ball ball = balls.get(i);

ball.draw(g);

}

}

private class PaintThread implements Runnable {

@Override

public void run() {

while(true) {

repaint();

try {

Thread.sleep(40);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

}

}

}

Ball类

package homework;

import java.awt.*;

public class Ball {

double x = 10;

double y = 32;

double speedX = 4;

double speedY = 4;

double changeA = 1;

double changeB = 2;

double changeC = 3;

int A, B, C = 0;

public Ball (double x, double y) {

this.x = x + this.x;

this.y = y + this.y;

}

public void draw(Graphics g) {

Color c = g.getColor();

g.setColor(new Color(A, B, C));

g.fillOval((int)x, (int)y, 100, 100);

x += speedX;

y += speedY;

A += changeA;

B += changeB;

C += changeC;

if(A >= 255 || A <= 0 ) changeA = -changeA;

if(B >= 254|| B <= 0 ) changeB = -changeB;

if(C >= 253|| C <= 0 ) changeC = -changeC;

if(x >= MyFrame.WIDTH-102 || x <= 8) speedX = -speedX;

if(y >= MyFrame.HEIGHT-102 || y <= 28) speedY = -speedY;

g.setColor(c);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: