package hangman; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class LetterCanvas extends JPanel{ Font font = new Font("SansSerif", Font.BOLD, 16); FontMetrics metrics = null; int letterHeight = 0; int overLetterIndex = -1; HangmanGame game = null; public LetterCanvas(){ metrics = getFontMetrics(font); addMouseMotionListener(new MouseHandler()); addMouseListener(new MouseHandler()); } public void paint(Graphics g){ int x = 10; int y = 0; String letters = game.letters; if(letters == null){ return; } letterHeight = metrics.getHeight() + 4; g.setColor(new Color(127, 127, 255)); g.fillRect(0, 0, getWidth(), getHeight()); g.setFont(font); for (int i = 0; i < letters.length(); i++){ String letter = letters.substring(i, i + 1); if(i == overLetterIndex){ g.setColor(Color.gray); g.fillRect(0, y + 1, getWidth(), letterHeight); } g.setColor(Color.black); g.drawString(letter, x, y + metrics.getHeight()); y+= letterHeight; g.drawLine(0, y, getWidth(), y); } } class MouseHandler implements MouseMotionListener, MouseListener{ public void mouseMoved(MouseEvent e){ overLetterIndex = e.getY()/letterHeight; if(overLetterIndex >= game.letters.length()){ overLetterIndex = -1; } repaint(); } public void mouseDragged(MouseEvent e){ } public void mousePressed(MouseEvent e){ if(overLetterIndex > -1){ game.tryLetter(overLetterIndex); } } public void mouseReleased(MouseEvent e){ } public void mouseClicked(MouseEvent e){ } public void mouseExited(MouseEvent e){ overLetterIndex = -1; repaint(); } public void mouseEntered(MouseEvent e){ } } }