// 3/13/2013 Greenstein: changed from applet to JFrame
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyboardAndFocusDemo
implements KeyListener, FocusListener, MouseListener
{
static final int SQUARE_SIZE = 40; // Length of a side of the square.
Color squareColor; // The color of the square.
int squareTop, squareLeft; // Coordinates of top-left corner of square.
boolean focussed = false; // True when this applet has input focus.
JFrame frame;
DisplayPanel canvas; // The drawing surface on which the applet draws.
final int XSIZE = 500, YSIZE = 500;
public static void main(String[] args)
{
KeyboardAndFocusDemo kafd = new KeyboardAndFocusDemo();
kafd.Run();
}
public void Run()
{
// Create a frame to hold everything
frame = new JFrame ("Hear Mouse");
frame.setSize(XSIZE, YSIZE);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//frame.setBackground(Color.black); // only needed if frame is larger than panel
// Define panel to draw on
canvas = new DisplayPanel(); // create a panel to draw on
canvas.setBackground(Color.white);
canvas.addFocusListener(this); // Set up the applet to listen for events
canvas.addKeyListener(this); // from the canvas.
canvas.addMouseListener(this); // connects the MouseListerner to the panel window
// Put frame together
frame.getContentPane().add(canvas); // puts panel on frame
frame.setVisible(true);
squareTop = YSIZE / 2 - SQUARE_SIZE / 2;
squareLeft = XSIZE / 2 - SQUARE_SIZE / 2;
squareColor = Color.red;
} // end Run();
class DisplayPanel extends JPanel
{
public void paintComponent(Graphics g)
{
super.paintComponent(g); // Fills the panel with its
// background color, which is white.
if (focussed)
g.setColor(Color.cyan);
else
g.setColor(Color.lightGray);
int width = getSize().width; // Width of the applet.
int height = getSize().height; // Height of the applet.
g.drawRect(0,0,width-1,height-1);
g.drawRect(1,1,width-3,height-3);
g.drawRect(2,2,width-5,height-5);
g.setColor(squareColor);
g.fillRect(squareLeft, squareTop, SQUARE_SIZE, SQUARE_SIZE);
/* If the applet does not have input focus, print a message. */
if (!focussed)
{
g.setColor(Color.magenta);
g.drawString("Click to activate",7,20);
}
} // end paintComponent()
} // end nested class DisplayPanel
// ------------------- Event handling methods ----------------------
public void focusGained(FocusEvent evt)
{
// The applet now has the input focus.
focussed = true;
canvas.repaint(); // redraw with cyan border
}
public void focusLost(FocusEvent evt)
{
// The applet has now lost the input focus.
focussed = false;
canvas.repaint(); // redraw without cyan border
}
public void keyTyped(KeyEvent evt)
{
char ch = evt.getKeyChar(); // The character typed.
if (ch == 'B' || ch == 'b')
{
squareColor = Color.blue;
canvas.repaint();
}
else if (ch == 'G' || ch == 'g')
{
squareColor = Color.green;
canvas.repaint();
}
else if (ch == 'R' || ch == 'r')
{
squareColor = Color.red;
canvas.repaint();
}
else if (ch == 'K' || ch == 'k')
{
squareColor = Color.black;
canvas.repaint();
}
} // end keyTyped()
public void keyPressed(KeyEvent evt)
{
int key = evt.getKeyCode(); // keyboard code for the key that was pressed
if (key == KeyEvent.VK_LEFT)
{
squareLeft -= 8;
if (squareLeft < 3)
squareLeft = 3;
canvas.repaint();
}
else if (key == KeyEvent.VK_RIGHT)
{
squareLeft += 8;
if (squareLeft > XSIZE - 3 - SQUARE_SIZE)
squareLeft = YSIZE - 3 - SQUARE_SIZE;
canvas.repaint();
}
else if (key == KeyEvent.VK_UP)
{
squareTop -= 8;
if (squareTop < 3)
squareTop = 3;
canvas.repaint();
}
else if (key == KeyEvent.VK_DOWN)
{
squareTop += 8;
if (squareTop > YSIZE - 3 - SQUARE_SIZE)
squareTop = YSIZE - 3 - SQUARE_SIZE;
canvas.repaint();
}
} // end keyPressed()
public void keyReleased(KeyEvent evt)
{
// empty method, required by the KeyListener Interface
}
public void mousePressed(MouseEvent evt)
{
// Request that the input focus be given to the
// canvas when the user clicks on the applet.
canvas.requestFocus();
}
public void mouseEntered(MouseEvent evt) { } // Required by the
public void mouseExited(MouseEvent evt) { } // MouseListener
public void mouseReleased(MouseEvent evt) { } // interface.
public void mouseClicked(MouseEvent evt) { }
} // end class KeyboardAndFocusDemo
Back to Lesson 26 Examples
Back to Java Main Page