Witam.
Mam JFrama, a tam 2x JScrollPane z JTextArea w środku i JTextField osobno. Próbuję zrobić tak, żeby po złapaniu focusu przez komponent jego ramka zmieniała się, a po utracie wracała do normy. Napisałem taką klasę obsługi zdarzenia:
class BorderOnFocus implements FocusListener {
private final Border BLUE = BorderFactory.createLineBorder(Color.blue);
private final Border DEFAULT = BorderFactory.createEtchedBorder();
@Override
public void focusGained(FocusEvent e) {
JComponent tmp = (JComponent)e.getSource();
if(tmp instanceof JTextField) {
tmp.setBorder(BLUE);
} else {
if(tmp == sourceText) {
sourceScrollPane.setBorder(BLUE);
} else {
destinationScrollPane.setBorder(BLUE);
}
}
}
@Override
public void focusLost(FocusEvent e) {
JComponent tmp = (JComponent)e.getSource();
if(tmp instanceof JTextField) {
tmp.setBorder(DEFAULT);
} else {
if(tmp == sourceText) {
sourceScrollPane.setBorder(DEFAULT);
} else {
destinationScrollPane.setBorder(DEFAULT);
}
}
}
Jednak po utracie fokusu przez TextArea(nawet pustym) pojawia mi się scrollBar. Jak to zmienić?