Pong KeyEvents
I'm having trouble making the arrow keys and q and a control my application.
Could someone give me some advice? How do I declare KeyEvents, and what are they added to? I have buttons in the contentpane and jlabels in a jpanel for the display of the pong game.
Thanks
import java.util.*;
import java.util.Timer.*;
import java.util.TimerTask;
import java.awt.Toolkit;
import java.text.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.geom.*;
publicclass workextends JFrame{
int ballx;
int bally;
finalint ballwidth=10;
finalint ballheight=10;
finalint tablexmax = 500;
finalint tableymax = 400;
int xvect = 1;
int yvect = -1;
finalint lpaddlex= 0;
finalint rpaddlex= 480;
int lpaddley= 170;
int rpaddley=170;
finalint paddlelength = 60;
finalint paddlewidth = 20;
int refresh = 9;
int quit =1;
int p1score=0;
int p2score=0;
public JButton start =new JButton();
//paddle maneuvers
int delta1;
int delta2;
public JTextField status=new JTextField();
JPanel viewer=new JPanel();
// array of jbuttons
public JButton[] keyJButtons =new JButton[KeyEvent.KEY_LAST+1];
public JButton player1upJButton=new JButton();
public JButton player1downJButton =new JButton();
public JButton player2upJButton=new JButton();
public JButton player2downJButton =new JButton();
public JLabel leftpaddle=new JLabel();
public JLabel rightpaddle =new JLabel();
public JLabel balllabel =new JLabel();
public JButton stop =new JButton();
public JTextField score1 =new JTextField();
public JTextField score2 =new JTextField();
//new
int roundcount=0;
public work()
{
createUserInterface();
}
privatevoid createUserInterface()
{
Container contentPane = getContentPane();
contentPane.setBackground(Color.GREEN);
contentPane.setLayout(null );
score1=new JTextField();
score1.setBounds(300, 0, 20, 20);
score1.setEditable(false);
score1.setText(String.valueOf(p1score));
contentPane.add(score1);
score2=new JTextField();
score2.setBounds(250, 0, 20, 20);
score2.setEditable(false);
score2.setText(String.valueOf(p2score));
contentPane.add(score2);
viewer=new JPanel();
viewer.setLayout(null);
viewer.setBounds (25, 25, 500, 400);
viewer.setBackground(Color.BLACK);
viewer.setVisible(true);
contentPane.add(viewer);
status =new JTextField();
status.setBounds(25, 450, 150, 20);
status.setText("Game in Progress...");
status.setEditable(false);
contentPane.add(status);
stop=new JButton();
stop.setBounds(650, 200, 140, 40);
stop.setText("Stop to Quit");
contentPane.add(stop);
stop.addActionListener(
new ActionListener()
{
publicvoid actionPerformed(ActionEvent event)
{
halt(event);
}
});
start =new JButton();
start.setBounds(550, 200, 80, 40);
start.setText("Reset");
contentPane.add(start);
start.addActionListener(
new ActionListener()
{
publicvoid actionPerformed(ActionEvent event)
{
commence(event);
}
});
player1upJButton=new JButton();
contentPane.add(player1upJButton);
keyJButtons[KeyEvent.VK_Q]= player1upJButton;
player1upJButton.setBounds(550, 380, 80, 40);
contentPane.add(player1upJButton);
player1upJButton.setText("Down");
player1upJButton.addActionListener(
new ActionListener()
{
publicvoid actionPerformed(ActionEvent event)
{
poop(event);
}
});
player1downJButton=new JButton();
player1downJButton.setBounds(550, 300, 80, 40);
player1downJButton.setText("up");
contentPane.add(player1downJButton);
keyJButtons[KeyEvent.VK_DOWN]= player1downJButton;
player1downJButton.addActionListener(
new ActionListener()
{
publicvoid actionPerformed(ActionEvent event)
{
p1d(event);
}
});
player2upJButton=new JButton();
contentPane.add(player2upJButton);
keyJButtons[KeyEvent.VK_Q]= player2upJButton;
player2upJButton.setBounds(650, 380, 80, 40);
player2upJButton.setText("Down");
player2upJButton.addActionListener(
new ActionListener()
{
publicvoid actionPerformed(ActionEvent event)
{
p2u(event);
}
});
player2downJButton=new JButton();
player2downJButton.setText("up");
contentPane.add(player2downJButton);
player2downJButton.setBounds(650, 300, 80, 40);
keyJButtons[KeyEvent.VK_A]= player2downJButton;
player2downJButton.addActionListener(
new ActionListener()
{
publicvoid actionPerformed(ActionEvent event)
{
p2d(event);
}
});
leftpaddle=new JLabel();
leftpaddle.setIcon(new ImageIcon("paddle.jpg"));
leftpaddle.setBounds(lpaddlex, lpaddley, paddlewidth, paddlelength);
leftpaddle.setHorizontalAlignment(JLabel.CENTER);
viewer.add(leftpaddle);
leftpaddle.setVisible(true);
leftpaddle.repaint();
rightpaddle =new JLabel();
rightpaddle.setIcon(new ImageIcon("paddle.jpg"));
rightpaddle.setBounds(rpaddlex, rpaddley, paddlewidth, paddlelength);
rightpaddle.setHorizontalAlignment(JLabel.CENTER);
viewer.add(rightpaddle);
rightpaddle.setVisible(true);
rightpaddle.repaint();
balllabel=new JLabel();
balllabel.setIcon(new ImageIcon("ball.jpg"));
balllabel.setBounds(ballx, bally, ballwidth, ballheight);
balllabel.setHorizontalAlignment(JLabel.CENTER);
viewer.add(balllabel);
balllabel.setVisible(true);
balllabel.repaint();
viewer.repaint();
setSize(800,600);
setVisible(true);
setTitle("Trace Pong");
center();
refresh();
}
publicvoid halt(ActionEvent event)
{
center();
quit=0;
player1upJButton.setEnabled(false);
player2upJButton.setEnabled(false);
player1downJButton.setEnabled(false);
player2downJButton.setEnabled(false);
start.setEnabled(false);
}
publicvoid commence(ActionEvent event)
{
center();
quit=1;
}
publicvoid poop(ActionEvent event)
{
delta1=1;
}
publicvoid p1d(ActionEvent event)
{
delta1=-1;
}
publicvoid p2u(ActionEvent event)
{
delta2=1;
}
publicvoid p2d(ActionEvent event)
{
delta2=-1;
}
publicvoid refresh()
{
if(refresh==1)
{
setSize(801, 601);
refresh=0;
}
if (refresh == 0)
{
setSize(800,600);
refresh =1;
}
if (roundcount==5)
{
quit=0;
status.setText(String.valueOf("Player1 Wins"));
if(p2score>p1score)
{
status.setText(String.valueOf("Player2 Wins"));
}
}
if (quit==1)
{
frame();
}
}
publicvoid render()
{
leftpaddle.setBounds(lpaddlex, lpaddley, paddlewidth, paddlelength);
rightpaddle.setBounds(rpaddlex, rpaddley, paddlewidth, paddlelength);
balllabel.setBounds(ballx, bally, ballwidth, ballheight);
viewer.repaint();
setSize(800,600);
setVisible(true);
}
publicvoid center()
{
ballx=250;
bally= 200;
lpaddley= 170;
rpaddley=170;
}
publicvoid wallcollission()
{
yvect *= -1;
frame();
}
publicvoid paddlecollission()
{
xvect *= -1;
frame();
}
publicvoid checkside()
{
if ((ballx)==paddlewidth||(ballx+ballwidth==tablexmax-paddlewidth))
{
checkpaddlepos();
}
if(bally==0||bally+ballwidth==tableymax)
{
wallcollission();
}
}
publicvoid checkpaddlepos()
{
if((bally)<=lpaddley+paddlelength&&(bally)>=lpaddley)
{
paddlecollission();
}
if ((bally)<=rpaddley+paddlelength&&(bally)>=rpaddley)
{
paddlecollission();
}
else
gameover();
}
publicvoid gameover()
{
status.setText("GameOver");
if (ballx==paddlewidth)
{
status.setText("Player2 Won");
p2score++;
roundcount++;
}
if(ballx+ballwidth==tablexmax-paddlewidth)
{
status.setText("Player1 Won");
p1score++;
roundcount++;
}
score1.setText(String.valueOf(p1score));
score2.setText(String.valueOf(p2score));
center();
refresh();
}
publicvoid frame()
{
for(int i=1; i<5000000; i++)
{
Math.sqrt((double)i);
}
lpaddley+=delta1*25;
rpaddley+=delta2*25;
if (lpaddley>=440)
{
lpaddley=440;
}
if (lpaddley<=0)
{
lpaddley=0;
}
if (rpaddley>=440)
{
rpaddley=440;
}
if (rpaddley<=0)
{
rpaddley=0;
}
ballx+=xvect;
bally+=yvect;
delta1=0;
delta2=0;
checkside();
render();
refresh();
}
publicstaticvoid main( String[] args )
{
work application =new work();
application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
}// end method main
}

