Hi Leute,
ich habe da folgendes Problem:
Ich habe eine JScrollPane deren View ein JPanel ist. Dieses JPanel enthält wiederum mehrere JPanel, die wiederum mehrere JTextFields enthalten, so dass der Inhalt größer ist als der sichtbare Bereich der View. Unterhalb der JScrollPane befinden sich ein paar JButtons, die verschiedene Action ausführen.
Wenn ich nun den Fokus in einem der Textfields habe und dann auf einen der Buttons klicke, soll nach Ausführen der Action der Fokus wieder im vorher fokussierten Textfeld sein.
Um ein automatisches Scrollen auszuführen habe ich einen ScrollFocusAdapter geschrieben und auf den Textfields platziert:
Mein Problem ist, dass wenn das Textfeld z.B. mittig auf dem JPanel platziert ist und ich dann die Action (die in einen eigenen Thread ausgelagert ist wg. Datenbankzugriff) auslöse, scrollt die JScrollPane automatisch ans Ende des Panels. Dann wird die Action ausgeführt und am Ende dann das Setzen des Fokus in das Textfeld wieder erledigt. Dann scrollt die JScrollPane wieder hoch zum Textfeld (durch das focusGained des ScrollAdapters). Dabei entsteht ein hässliches Flackern, weil das nicht schnell genug hintereinander ausgeführt wird.
WIe kann ich also erreichen, dass die ScrollPane still stehen bleibt beim verlieren des Fokus, und dann auch nur dann scrollt, falls das Feld wirklich außerhalb des sichtbaren Bereichs liegt?
Vielen Dank
shocking
ich habe da folgendes Problem:
Ich habe eine JScrollPane deren View ein JPanel ist. Dieses JPanel enthält wiederum mehrere JPanel, die wiederum mehrere JTextFields enthalten, so dass der Inhalt größer ist als der sichtbare Bereich der View. Unterhalb der JScrollPane befinden sich ein paar JButtons, die verschiedene Action ausführen.
Wenn ich nun den Fokus in einem der Textfields habe und dann auf einen der Buttons klicke, soll nach Ausführen der Action der Fokus wieder im vorher fokussierten Textfeld sein.
Um ein automatisches Scrollen auszuführen habe ich einen ScrollFocusAdapter geschrieben und auf den Textfields platziert:
Code:
public void focusGained(FocusEvent e) {
Component focusedComponent = e.getComponent();
if (!focusedComponent.equals(MainFrame.getInstance().getLastFocusedComponent())) {
// selektiere den Text
if (focusedComponent instanceof JTextComponent) {
((JTextComponent) focusedComponent).selectAll();
}
bounds = focusedComponent.getBounds(null);
JPanel parent = getParentPanel(focusedComponent);
// X soll beim scrollen vernachlaessigt werden. Wir scrollen nur
// vertikal.
bounds.x = 0;
parent.scrollRectToVisible(bounds);
parent.repaint();
}
Mein Problem ist, dass wenn das Textfeld z.B. mittig auf dem JPanel platziert ist und ich dann die Action (die in einen eigenen Thread ausgelagert ist wg. Datenbankzugriff) auslöse, scrollt die JScrollPane automatisch ans Ende des Panels. Dann wird die Action ausgeführt und am Ende dann das Setzen des Fokus in das Textfeld wieder erledigt. Dann scrollt die JScrollPane wieder hoch zum Textfeld (durch das focusGained des ScrollAdapters). Dabei entsteht ein hässliches Flackern, weil das nicht schnell genug hintereinander ausgeführt wird.
WIe kann ich also erreichen, dass die ScrollPane still stehen bleibt beim verlieren des Fokus, und dann auch nur dann scrollt, falls das Feld wirklich außerhalb des sichtbaren Bereichs liegt?
Vielen Dank
shocking