-1
我想知道如何将一个Timer和我的所有监听器应用为内部类。我仍然对内部类感到困惑,所以有人可以解释,我怎样才能将它应用到我自己的程序中,这将非常感激。我刚刚学会了计时器,但我不确定在哪里以及如何设置它。我想设定60秒。内部监听器和计时器的足球游戏程序
这里是我的代码:
package runningback;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class MainPanel extends JPanel implements KeyListener
{
JLabel text = new JLabel("Touchdowns: ");
JLabel text2 = new JLabel("Tackles: ");
JLabel touchdownsLbl;
JLabel tacklesLbl;
JButton movingButton = new JButton("key code");
JButton startBtn = new JButton("Start");
JLabel background=new JLabel(new ImageIcon("playground.png"));
JLabel rb=new JLabel(new ImageIcon("rb.png"));
JLabel tackler=new JLabel(new ImageIcon("tackler.png"));
int x =0;
int y = 10;
int touchdowns;
int tackles;
Player mainPlayer;
public MainPanel()
{
mainPlayer = new Player();
touchdowns = 0;
tackles = 0;
touchdownsLbl = new JLabel(Integer.toString(touchdowns));
tacklesLbl = new JLabel(Integer.toString(tackles));
setLayout(null);
//setBackground(Color.pink);
add(text);
add(text2);
add(touchdownsLbl);
add(tacklesLbl);
text.setBounds(new Rectangle(350, 20, 350, 30));
text2.setBounds(new Rectangle(450, 20, 350, 30));
touchdownsLbl.setBounds(new Rectangle(435, 20, 350, 30));
tacklesLbl.setBounds(new Rectangle(505, 20, 350, 30));
setFocusable(true);
addKeyListener(this);
add(rb);
add(background);
background.setBounds(new Rectangle(0, 94, 624, 416));
rb.setBounds(new Rectangle(mainPlayer.x, mainPlayer.y, 50, 44));
//add(movingButton);
startBtn.setBounds(new Rectangle(250, 20, 80, 30));
add(startBtn);
startBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//System.out.println("Button Pressed");
gameReset();
}
});
//---------------------TIMER------------------------------
int delay = 1000; // milliseconds
tim = new Timer(delay,this);
tim.start(); // starts the timer
//---------------------TIMER------------------------------
tim.setDelay(200); // sets a new delay
tim.stop(); // stops the timer // stops the timer
}
}
public void keyPressed(KeyEvent evt)
{
//System.out.println("Key pressed");
int kk = evt.getKeyCode();
if(kk == evt.VK_LEFT) {mainPlayer.x=mainPlayer.x-mainPlayer.speed;}
if(kk == evt.VK_RIGHT) {mainPlayer.x=mainPlayer.x+mainPlayer.speed;}
if(kk == evt.VK_UP) {mainPlayer.y=mainPlayer.y-mainPlayer.speed;}
if(kk == evt.VK_DOWN) {mainPlayer.y=mainPlayer.y+mainPlayer.speed;}
update();
//movingButton.setText(""+evt.getKeyCode()+","+evt.getKeyChar());
//movingButton.setBounds(new Rectangle(x,y,80,30));
}
void update(){
rb.setBounds(new Rectangle(mainPlayer.x, mainPlayer.y, 50, 44));
}
void gameReset(){
mainPlayer.x = 30;
mainPlayer.y = 280;
update();
}
public void keyReleased(KeyEvent evt) { }
public void keyTyped(KeyEvent evt) { }
public void paintComponent(Graphics g)
{
//System.out.println("Painting");
super.paintComponent(g);
requestFocusInWindow();
}
@Override
public Dimension getPreferredSize() {
return new Dimension(624, 500);
}
}
您已经在使用上面一些你的ActionListeners的“内部”类 - 所以请注明尽可能它是什么,究竟是混淆你。我们越理解这个问题,通常答案就越好。我自己,我有点困惑,为什么你要调用'requestFocusInWindow();'paintComponent方法内部。这看起来像是一件危险的事情,我不确定你什么时候会想要这种功能。 –
另外,我没有看到上面的任何定时器代码,所以请澄清你的意思。你指的是一个Swing Timer(javax.swing.Timer)实例吗? –
我想出了我的内部类,并添加了一个计时器。 int delay = 1000; //毫秒 tim = new Timer(delay,this); tim.start(); //启动计时器 tim.setDelay(200); //设置新的延迟 tim.stop(); //停止计时器//停止计时器 –