Hi!
Ich versuche das Ganze mal mit dem FocusListener (http://java.sun.com/j2se/1.3/docs/api/java/awt/event/FocusListener.html). Es kommt darauf an, in welcher Reihenfolge die Events aufgerufen werden. Wird zuerst JList.focusLost() aufgerufen und dann JButton.focusGained(), dann müsste es funktionieren, indem die Liste die Buttons disabled und die Buttons sich selbst wieder enablen:
JList liste = new JList(...);
JButton edit = new JButton(...);
JButton del = new JButton(...);
liste.addFocusListener( new FocusListener()
{
public void focusLost(FocusEvent e)
{
edit.setEnabled(false);
del...
}
public void focusGained(FocusEvent e) { /*Nix zu tun*/ }
});
edit.addFocusListener( new FocusListener()
{
public void focusLost(FocusEvent e) { /*Nix zu tun*/ }
public void focusGained(FocusEvent e)
{
edit.setEnabled(true);
del...
//evtl. hier auf Event reagieren, falls der ActionListener durch das disablen "hängenbleibt"
}
});
edit.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
//auf Event reagieren
}
});
//das gleiche noch mal für Button "del"
Sollte das nicht funktionieren (z.B. weil der Button, wenn er disabled wird, sein focusGained() unterdrückt), dann müsstest Du das so regeln, dass alle Komponenten, die den Fokus bekommen können, die Buttons disablen (außer die Buttons selbst):
JComponent anderekomponente = new JComponent(...);
anderekomponente.addFocusListener( new FocusListener()
{
public void focusLost(FocusEvent e) { /*Nix zu tun*/ }
public void focusGained(FocusEvent e)
{
edit.setEnabled(false);
del...
}
});
Das ist aber natürlich nicht sehr bequem (vor allem, weil auch das Fenster den Fokus verlieren kann!).
Das Dumme daran ist, dass die Liste nicht herausfinden kann, an wen sie den Focus verloren hat - es sei denn, button.hasFocus() liefert schon true, wenn liste.focusLost() aufgerufen wird.
Aber da musst Du wohl ein bißchen rumprobieren... :-)
MfG Simon