Scrollpane scrollt immer zur TextArea

Status
Nicht offen für weitere Antworten.

flippus

Mitglied
Hi,

das Problem steht ja schon im Titel, von daher hier einfach mal ein bisschen Code:

Code:
		JScrollPane createProfileSP = new JScrollPane();
		JPanel createProfilePanel = new JPanel();

		GridBagLayout gblCreateProfileScreen = new GridBagLayout();
		
		// add components																	
		
                [...]

		createProfilePanel.setLayout( gblCreateProfileScreen );
		
	    createProfileSP.getViewport().add( createProfilePanel );


Es werden einige Panels geadded, in einem davon befindet sich ein JTextArea.
Folgender Effekt: Der Bildschirm wird angezeigt, alles wunderbar bis auf die Scrollleiste.
Es wird automatisch heruntergescrollt bis zum dem JTextArea. Das will ich nicht!!

Habe jetzt schon einiges versucht mit:

createProfileSP.getVerticalScrollBar().setValue( 0 );
createProfileSP.getVerticalScrollBar().setValue( 1 );
createProfileSP.getVerticalScrollBar().setViewPosition( erster geaddeter Panel );

scrollRectToVisible( ... ) ...

Aber da scheint es überall nicht dran zu liegen.
Wie kann ich verhindern, dass bis zu dem Textfeld gescrollt wird? Dieses ist der Auslöser für die Scrollaktion.

Vielen Dank im Voraus,
Philipp


EDIT: Habe herausgefunden, dass es funktinoiert, wenn ich es den setValue-Befehl per Knopfdruck auslöse. Momentan befindet er sich im Konstruktor. Wo kann ich ihn alternativ positionieren?
 
Mach ein KSKB (siehe dazu "Lies mich" hier links nebendran).
Beispiel:
Code:
package gui;
/*
 * ScrollDemo.java
 */
import java.awt.*;
import javax.swing.*;
public class ScrollDemo extends JFrame {
    public ScrollDemo() {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setSize(450,250);
        setLocationRelativeTo(null);
        mainPanel = new JPanel();
        panel = new JPanel();
        textarea = new JTextArea("textarea");
        mainPanel.setPreferredSize(new Dimension(400, 620));
        panel.setBackground(new Color(204, 204, 255));
        panel.setPreferredSize(new Dimension(400, 300));
        mainPanel.add(panel);
        textarea.setPreferredSize(new Dimension(400, 300));
        mainPanel.add(textarea);
        getContentPane().add(new JScrollPane(mainPanel), BorderLayout.CENTER);
    }
    public static void main(final String args[]) {new ScrollDemo().setVisible(true);}
    private JPanel mainPanel, panel;
    private JTextArea textarea;
}
 
nichts für ungut aber wozu genau soll ich so etwas erstellen? ich weiss doch, dass es an dem TextArea-Objekt liegt... :bahnhof:

Sofern ich ein TextArea oder TextField einfüge, scrollt er zu dessen Position.
Ich muss doch nur wissen, was genau dafür sorgt und das dann entfernen.
 
flippus hat gesagt.:
nichts für ungut aber wozu genau soll ich so etwas erstellen?..
Es hilft erstens dir bei der Fehlersuche (der Fehler liegt erfahrungsgemäss nicht dort wo man zunächst glaubt).
Und es hilft uns, damit wir das Problem nachvollziehen können und so besser helfen können.
 
Das ist an sich auch eine gute Idee aber ich habe bereits einige Zeit in die Fehlersuche investiert und den Fehler demensprechend auch bei der JTextArea lokalisieren können :wink:

Für alle, die in Zukunft ein ähnliches Problem haben:

Habe jetzt ein einfaches TextField benutzt, es funktioniert jetzt komischerweise einwandfrei.
Ein unbefriedigendes Ergebnis aber zumindest klappt es und es kann weitergehen, da ich keine Area benötige 🙂

@André:
Trotzdem danke für den Tipp mit dem KSKB! In dem Fall wäre für mich aber wohl nur Mehraufwand gewesen.
 
Wie du an Andrés Beispiel siehst ist das von dir geschilderte Verhalten nicht normal, daher liegt der Fehler irgendwo in deinem Code.
 
ich setze u.a. ein eigenes look&feel (synth) ein, was schon der grund für so einige schnitzer war. in dem geschilderten fall lohnt es für mich aber nicht, ein solches kskb zu bauen und danach zu suchen, da ich die textarea überhaupt nicht benötige. der aufwand, das ganze nachzubauen und auf das minimum zu beschränken würde nicht lohnen, weil es mich bei der eigentlichen entwicklung nicht weiterbringen würde :wink:

falls ich später eine textarea benötige, kann ich immernoch nach der ursache suchen, wobei ich vermute, dass es wieder "nur" irgendein versteckter flag ist, der nicht gesetzt sein darf o.ä.
für den moment bin ich so zufrieden 🙂

trotzdem noch einmal danke!
 
Abgesehen finde ich es grausam UIs in ScrollPanes zu packen. Wer solche Krücken benutzt, sollte sein UI mal auf Vordermann bringen...
 
schön ist das nicht, das stimmt schon aber in manchen situationen nur schwer umgänglich - wie z.B. in meinem fall :wink:
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben