I'm writing a Tetris game and most of my mechanism is done. I tried to input my keyboard interaction creating a new KeyListener, but it simply doesn't seem to work, as I press the buttons the pieces just keep falling instead of changing their position. Could anybody help me please?
GUI Class:
package tetris;
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
public class Game extends javax.swing.JFrame {
Library obj = new Library();
public Game() {
initComponents();
jPanel1.setLayout(new GridLayout(15,20));
for(int i = 0; i<15; i++){
for(int j = 0; j<20; j++){
JLabel label = new JLabel();
label.setSize(15, 15);
label.setIcon(new ImageIcon(getClass().getResource("whitetile.png")));
jPanel1.add(label);
obj.setTiles(i, j, label);
label.addKeyListener(new KeyListener());
this.setFocusable(true);
this.requestFocusInWindow();
}
}
obj.start();
}
private class KeyListener extends KeyAdapter{
@Override
public void keyPressed(KeyEvent evt){
if(evt.getKeyChar() == KeyEvent.VK_LEFT){
obj.tiles[obj.r1][obj.col1].setIcon(obj.white);
obj.tiles[obj.r2][obj.col2].setIcon(obj.white);
obj.tiles[obj.r3][obj.col3].setIcon(obj.white);
obj.tiles[obj.r4][obj.col4].setIcon(obj.white);
obj.col1 -= 1;
obj.col2 -= 1;
obj.col3 -= 1;
obj.col4 -= 1;
obj.tiles[obj.r1][obj.col1].setIcon(obj.red);
obj.tiles[obj.r2][obj.col2].setIcon(obj.red);
obj.tiles[obj.r3][obj.col3].setIcon(obj.red);
obj.tiles[obj.r4][obj.col4].setIcon(obj.red);
}
if(evt.getKeyChar() == KeyEvent.VK_RIGHT){
obj.tiles[obj.r1][obj.col1].setIcon(obj.white);
obj.tiles[obj.r2][obj.col2].setIcon(obj.white);
obj.tiles[obj.r3][obj.col3].setIcon(obj.white);
obj.tiles[obj.r4][obj.col4].setIcon(obj.white);
obj.col1 += 1;
obj.col2 += 1;
obj.col3 += 1;
obj.col4 += 1;
obj.tiles[obj.r1][obj.col1].setIcon(obj.red);
obj.tiles[obj.r2][obj.col2].setIcon(obj.red);
obj.tiles[obj.r3][obj.col3].setIcon(obj.red);
obj.tiles[obj.r4][obj.col4].setIcon(obj.red);
}
if(evt.getKeyChar() == KeyEvent.VK_SPACE){
obj.spin();
}
}
@Override
public void keyReleased(KeyEvent evt){
}
@Override
public void keyTyped(KeyEvent evt){
}
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setPreferredSize(new java.awt.Dimension(350, 225));
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 350, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 338, Short.MAX_VALUE)
);
jLabel1.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
jLabel1.setText("Nivel: " + String.valueOf(obj.level));
jLabel2.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
jLabel2.setText("Puntuacion: " + String.valueOf(obj.score));
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(46, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE)))
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap(81, Short.MAX_VALUE)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 338, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
.addGroup(layout.createSequentialGroup()
.addGap(118, 118, 118)
.addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(40, 40, 40)
.addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>
public static void main(String args[]) {
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
/* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
* For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
*/
try {
for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName());
break;
}
}
} catch (ClassNotFoundException ex) {
java.util.logging.Logger.getLogger(Game.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (InstantiationException ex) {
java.util.logging.Logger.getLogger(Game.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (IllegalAccessException ex) {
java.util.logging.Logger.getLogger(Game.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
} catch (javax.swing.UnsupportedLookAndFeelException ex) {
java.util.logging.Logger.getLogger(Game.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
}
//</editor-fold>
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Game().setVisible(true);
}
});
}
// Variables declaration - do not modify
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
// End of variables declaration
}