Tack, fungerar perfekt. Nu har jag hört att ett textfält kan ha flera särskilda lyssnare, säg om jag vill att när man dubbelklickar på textfältet så försvinner det, och när jag trycker på knappen så dyker textfältet upp, hur skulle det se ut?
Du får helt enkelt implementera interface:t MouseListener och dessutom implementera dess metoder:
Du kan implementera flera interface i samma klass som du separerar med ett komma-tecken:
public class Olle implements InterfaceX, InterfaceY osv...
{
}
public void mouseClicked(MouseEvent e) { }
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
public void mousePressed(MouseEvent e)
{
}
public void mouseReleased(MouseEvent e) { }
sedan så måste du koppla MouseListener till den valda objektet, dvs JTextArea area:
area.addMouseListener(this);
Några ändringar måste du göra i koden;
I metoden mousePressed() så måste du lägga in några rader för att göra textarean osynlig. Detta gör du med:
area.setVisible(false);
Om du vill att textarean döljs enbart om man dubbel-klickar så kan du anropa metoden getClickCount() som du hittar in variabeln MouseEvent e som du hittar som argument i metoden mousePressed():
sedan så måste du ändra i metoden actionPerformed():
area.setVisible(true);
Nu så fungerar denna ActionListener enbart med knappen btn.
Vill du att samma lyssnare skall kunna lyssna på helt olika objekt så måste du i metoden actionPerformed() först kontrollera vad det är för typ av objekt just då och då kan du göra såhär
public void actionPerformed(ActionEvent e)
{
Object o = (Object)e.getSource();
// är det en knapp?
if(o instanceof JButton)
{
JButton src = (JButton)o;
if(src.equals(btn) )
{
area.setVisible(true);
}
}
// eller är det en JPanel?
if(o instanceof JPanel)
{
JPanel src = (JPanel)o;
}
}
Denna exempel fungerar givetvis bara ifall du har skapat en JPanel och som till du har kopplat en MouseListener till.