import javax.swing.*; import java.awt.*; import java.awt.event.*; class World extends JComponent implements KeyListener, ActionListener { int count; public void actionPerformed(ActionEvent e) { this.count += 1; System.out.println("Ouch..." + this.count); } public void keyPressed(KeyEvent e) { int value = e.getKeyCode(); System.out.println("Key pressed: " + (char) value); switch (value) { // http://docs.oracle.com/javase/6/docs/api/java/awt/event/KeyEvent.html#VK_LEFT case KeyEvent.VK_LEFT : System.out.println("Left arrow pressed."); break; case KeyEvent.VK_RIGHT: System.out.println("Right arrow pressed."); break; case KeyEvent.VK_UP : System.out.println("Up arrow pressed."); break; case KeyEvent.VK_DOWN : System.out.println("Down arrow pressed."); break; case KeyEvent.VK_SPACE: System.out.println("Space bar pressed."); break; default: System.out.println("Unknown key pressed."); break; } } public void keyReleased(KeyEvent e) { } public void keyTyped(KeyEvent e) { } Square a, b, c, d; Timer timer; World() { this.timer = new Timer(1000, this); this.a = new Square(this, Color.RED, 2, 3); this.b = new Square(this, Color.BLUE, 3, 4); this.c = new Square(this, Color.GREEN, 2, 5); this.d = new Square(this, Color.YELLOW, 1, 4); } void start() { this.timer.start(); } public void paintComponent(Graphics g) { g.drawString("Welcome to Tetris!", 50, 150); a.draw(g); b.draw(g); c.draw(g); d.draw(g); } static final int ROWS = 22; static final int COLS = 10; int squareWidth() { return (int) getSize().getWidth() / World.COLS; } int squareHeight() { return (int) getSize().getHeight() / World.ROWS; } }