JButton reagiert nicht auf KeyListener//Focuslistener

Status
Nicht offen für weitere Antworten.

Ariol

Top Contributor
Hi,

ich wollte mir einen Button bauen, der speziell hervorgehoben wird, wenn er den Focus hat und auf Spezielle Events reagiert. Leider funktioniert weder das eine noch das andere - Es passiert nada.

Hier mal mein Code. Vielleicht erkennt ja jemand von euch den Fehler.

Danke schonmal im vorraus. :wink:

Ariol



Code:
package test;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JButton;

public class SpecialButton extends JButton implements KeyListener, FocusListener
{
	SpecialPanel specialPanel;

	boolean selected = false;
	
	public SpecialButton(final SpecialPanel specialPanel, String text)
	{
		super(text);
		this.specialPanel = specialPanel;
	}

	public void keyPressed(KeyEvent e)
	{
		System.err.println(e);
		if (e.getKeyCode() == KeyEvent.VK_ESCAPE)
		{
			specialPanel.back();
		} else if (e.getKeyCode() == KeyEvent.VK_RIGHT)
		{
			specialPanel.next();
		} else if (e.getKeyCode() == KeyEvent.VK_LEFT)
		{
			specialPanel.previous();
		}
		else if (e.getKeyCode() == KeyEvent.VK_ENTER)
		{
			specialPanel.forward();
		}
	}

	public void keyReleased(KeyEvent e)
	{

		System.err.println(e);
	}

	public void keyTyped(KeyEvent e)
	{

		System.err.println(e);
	}

	public void focusGained(FocusEvent e)
	{
		selected = true;
		repaint();
	}

	public void focusLost(FocusEvent e)
	{
		selected = false;
		repaint();
	}

	@Override
	public void paintComponents(Graphics g)
	{
		super.paintComponents(g);
		if (selected)
		{
			g.setColor(Color.red);
			g.drawLine(0, 0, getWidth(), getHeight());
		}
	}
}
 
Aaaargh.
Danke vielmals.
Ich könnt mich Ohrfeigen.

Aber die rote Linie über dem selektierten Button erscheint immer noch nicht. Jemand eine Idee?
 
falsche methode überschrieben

Code:
   public void paintComponent(Graphics g) 
   { 
      super.paintComponent(g); 
      if (selected) 
      { 
         g.setColor(Color.red); 
         g.drawLine(0, 0, getWidth(), getHeight()); 
      } 
   }
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben