Java 按键时显示图像,并将其保留在屏幕上,直到线程停止
我想做一个零和交叉的游戏,所以你用你的鼠标选择一个框,然后在键盘上的X或O输入答案。我已经尽可能地让选择框工作,但似乎无法让x和o工作。我的代码可能不是最好的,因为这是我制作的第一个游戏 这是我的主要课程:Java 按键时显示图像,并将其保留在屏幕上,直到线程停止,java,image,background,while-loop,key,Java,Image,Background,While Loop,Key,我想做一个零和交叉的游戏,所以你用你的鼠标选择一个框,然后在键盘上的X或O输入答案。我已经尽可能地让选择框工作,但似乎无法让x和o工作。我的代码可能不是最好的,因为这是我制作的第一个游戏 这是我的主要课程: package com; import javax.swing.*; import java.awt.event.*; import java.awt.*; public class Board extends JPanel implements ActionListener, Mou
package com;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class Board extends JPanel implements ActionListener, MouseListener,
KeyListener {
public int box = 1;
public int x, y;
public int cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4, cx5, cy5;
public boolean player1 = true;
public boolean player2 = false;
public boolean box1 = false;
public boolean box2 = false;
public boolean box3 = false;
public boolean box4 = false;
public boolean box5 = false;
public boolean box6 = false;
public boolean box7 = false;
public boolean box8 = false;
public boolean box9 = false;
public boolean xpress = false;
public boolean cross1 = false;
public boolean cross2 = false;
public boolean cross3 = false;
public boolean cross4 = false;
public boolean cross5 = false;
public Thread t;
Timer time;
JButton cross, naught;
Image Board, Select, Cross, Cross2, Cross3, Cross4, Cross5, Naught;
Board() {
super();
x = 0;
y = 60;
t = new Thread();
time = new Timer(5, this);
time.start();
t.start();
setFocusable(true);
addMouseListener(this);
addKeyListener(this);
ImageIcon i = new ImageIcon(getClass().getResource(
"/images/Board_N+C.png"));
Board = i.getImage();
ImageIcon i1 = new ImageIcon(getClass().getResource(
"/images/Select_N+C.png"));
Select = i1.getImage();
ImageIcon i2 = new ImageIcon(getClass().getResource(
"/images/Cross_N+C.png"));
Cross = i2.getImage();
Cross2 = i2.getImage();
Cross3 = i2.getImage();
Cross4 = i2.getImage();
Cross5 = i2.getImage();
ImageIcon i3 = new ImageIcon(getClass().getResource(
"/images/Naught_N+C.png"));
Naught = i3.getImage();
}
public void paint(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(Board, 0, 60, null);
if (cross1) {
}
if (x < 170 && y < 230 && !xpress) {
g2d.drawImage(Select, 0, 60, null);
repaint();
} else if (x < 340 && x > 170 && y < 230 && !xpress) {
g2d.drawImage(Select, 170, 60, null);
repaint();
} else if (x < 510 && x > 340 && y < 230 && !xpress) {
g2d.drawImage(Select, 340, 60, null);
repaint();
} else if (x < 170 && y < 400 && y > 230 && !xpress) {
g2d.drawImage(Select, 0, 230, null);
repaint();
} else if (x < 340 && x > 170 && y < 400 && y > 230 && !xpress) {
g2d.drawImage(Select, 170, 230, null);
repaint();
} else if (x < 510 && x > 340 && y < 400 && y > 230 && !xpress) {
g2d.drawImage(Select, 340, 230, null);
repaint();
} else if (x < 170 && y < 570 && y > 400 && !xpress) {
g2d.drawImage(Select, 0, 400, null);
repaint();
} else if (x < 340 && x > 170 && y < 570 && y > 400 && !xpress) {
g2d.drawImage(Select, 170, 400, null);
repaint();
} else if (x < 510 && x > 340 && y < 570 && y > 400 && !xpress) {
g2d.drawImage(Select, 340, 400, null);
repaint();
}
if (xpress && !player2) {
if (x < 170 && y < 230) {
cross1 = true;
while (cross1) {
g2d.drawImage(Cross, 0, 60, null);
System.out.println("Cross");
}repaint();
xpress = false;
} else if (x < 340 && x > 170 && y < 230) {
repaint();
} else if (x < 510 && x > 340 && y < 230) {
repaint();
} else if (x < 170 && y < 400 && y > 230) {
repaint();
} else if (x < 340 && x > 170 && y < 400 && y > 230) {
repaint();
} else if (x < 510 && x > 340 && y < 400 && y > 230) {
repaint();
} else if (x < 170 && y < 570 && y > 400) {
repaint();
} else if (x < 340 && x > 170 && y < 570 && y > 400) {
repaint();
} else if (x < 510 && x > 340 && y < 570 && y > 400) {
repaint();
}
}
}
public void mouseClicked(MouseEvent me) {
x = me.getX();
y = me.getY();
}
@Override
public void actionPerformed(ActionEvent e) {
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
}
public void mouseReleased(MouseEvent arg0) {
}
public void keyPressed(KeyEvent e) {
int key = e.getKeyCode();
if (key == e.VK_X) {
if (player1) {
xpress = true;
player1 = false;
player2 = true;
}
}
}
public void keyReleased(KeyEvent e) {
}
public void keyTyped(KeyEvent e) {
}
}
package-com;
导入javax.swing.*;
导入java.awt.event.*;
导入java.awt.*;
公共类板扩展JPanel实现ActionListener、MouseListener、,
键盘监听器{
公共整数框=1;
公共整数x,y;
公共int cx1、cy1、cx2、cy2、cx3、cy3、cx4、cy4、cx5、cy5;
公共布尔值player1=true;
公共布尔player2=false;
公共布尔框1=false;
公共布尔框2=false;
公共布尔框3=false;
公共布尔框4=false;
公共布尔框5=false;
public boolean box6=false;
public boolean box7=false;
公共布尔框8=false;
公共布尔框9=false;
公共布尔表达式=false;
公共布尔交叉1=假;
公共布尔交叉2=假;
公共布尔交叉3=假;
公共布尔交叉4=假;
公共布尔交叉5=假;
公共线程t;
定时器时间;
吉布顿十字,无;
图像板,选择,交叉,交叉2,交叉3,交叉4,交叉5,无;
董事会(){
超级();
x=0;
y=60;
t=新螺纹();
时间=新计时器(5,此);
time.start();
t、 start();
设置聚焦(真);
addMouseListener(这个);
addKeyListener(此);
ImageIcon i=新的ImageIcon(getClass().getResource(
“/images/Board_N+C.png”);
Board=i.getImage();
ImageIcon i1=新的ImageIcon(getClass().getResource(
“/images/Select_N+C.png”);
Select=i1.getImage();
ImageIcon i2=新的ImageIcon(getClass().getResource(
“/images/Cross_N+C.png”);
Cross=i2.getImage();
Cross2=i2.getImage();
Cross3=i2.getImage();
Cross4=i2.getImage();
Cross5=i2.getImage();
ImageIcon i3=新的ImageIcon(getClass().getResource(
“/images/nott_N+C.png”);
NOUT=i3.getImage();
}
公共空间涂料(图g){
超级油漆(g);
Graphics2D g2d=(Graphics2D)g;
g2d.drawImage(板,0,60,空);
如果(交叉1){
}
如果(x<170&&y<230&&xpress){
g2d.drawImage(Select,0,60,null);
重新油漆();
}否则如果(x<340&&x>170&&y<230&&&xpress){
g2d.drawImage(选择,170,60,空);
重新油漆();
}否则如果(x<510&&x>340&&y<230&&&xpress){
g2d.drawImage(选择,340,60,空);
重新油漆();
}否则如果(x<170&&y<400&&y>230&&&xpress){
g2d.drawImage(选择,0,230,空);
重新油漆();
}否则如果(x<340&&x>170&&y<400&&y>230&&xpress){
g2d.drawImage(选择,170,230,空);
重新油漆();
}否则如果(x<510&&x>340&&y<400&&y>230&&&xpress){
g2d.drawImage(选择,340230,空);
重新油漆();
}否则如果(x<170&&y<570&&y>400&&xpress){
g2d.drawImage(Select,0400,null);
重新油漆();
}否则如果(x<340&&x>170&&y<570&&y>400&&xpress){
g2d.drawImage(Select,170400,null);
重新油漆();
}否则如果(x<510&&x>340&&y<570&&y>400&&xpress){
g2d.drawImage(Select,340400,null);
重新油漆();
}
如果(xpress&&!player2){
如果(x<170和y<230){
cross1=真;
while(cross1){
g2d.drawImage(交叉,0,60,空);
系统输出打印项次(“交叉”);
}重新油漆();
xpress=假;
}否则如果(x<340&&x>170&&y<230){
重新油漆();
}否则,如果(x<510&&x>340&&y<230){
重新油漆();
}否则如果(x<170&&y<400&&y>230){
重新油漆();
}否则如果(x<340&&x>170&&y<400&&y>230){
重新油漆();
}否则如果(x<510&&x>340&&y<400&&y>230){
重新油漆();
}否则如果(x<170&&y<570&&y>400){
重新油漆();
}否则如果(x<340&&x>170&&y<570&&y>400){
重新油漆();
}否则如果(x<510&&x>340&&y<570&&y>400){
重新油漆();
}
}
}
公共无效mouseClicked(MouseEvent me){
x=me.getX();
y=me.getY();
}
@凌驾
已执行的公共无效操作(操作事件e){
}
公共无效鼠标事件(鼠标事件arg0){
}
public void mouseexitted(MouseEvent arg0){
}
public void mousePressed(MouseEvent arg0){
}
公共无效MouseEvent arg0{
}
按下公共无效键(按键事件e){
int key=e.getKeyCode();
if(key==e.VK_X){
如果(播放者1){
xpress=真;
player1=假;
player2=true;
}
}
}
公共无效密钥已释放(密钥事件e){
}
public void keyTyped(KeyEvent e){
}
}
如何在按键时显示图像,并使其保持在屏幕上直到线程停止
希望有人能帮忙。如果您需要更多信息,请询问。您显然不知道线程在Java中是如何工作的
t = new Thread();
time = new Timer(5, this);
time.start();
t.start();
首先,创建线程
将不起任何作用(否则线程将启动并立即死亡,因为它不起任何作用)
其次,你最好
public class PopShowAndFadeImage {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
JFrame test = new JFrame("Test");
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test.setSize(700, 1000);
test.setLocationRelativeTo(null);
test.setLayout(new BorderLayout());
test.add(new ImagePane());
test.setVisible(true);
}
protected static class ImagePane extends JPanel {
private BufferedImage background;
private Image image;
private Timer timeOut;
public ImagePane() {
timeOut = new Timer(1000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
image = null;
repaint();
}
});
timeOut.setRepeats(false);
timeOut.setCoalesce(true);
setFocusable(true);
InputMap im = getInputMap(WHEN_FOCUSED);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SPACE, 0), "HitMe");
am.put("HitMe", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
if (background == null) {
try {
background = ImageIO.read(getClass().getResource("/MT011.gif"));
} catch (IOException exp) {
exp.printStackTrace();;
}
}
image = background;
repaint();
timeOut.restart();
}
});
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
if (image != null) {
int width = getWidth() - 1;
int height = getHeight() - 1;
Graphics2D g2d = (Graphics2D) g;
int x = (width - image.getWidth(this)) / 2;
int y = (height - image.getHeight(this)) / 2;
g2d.drawImage(image, x, y, this);
}
}
}
}