Sichtbarer Bereich JScrollPane vs. JList

wmf

Mitglied
Hallo alle zusammen,

ich habe eine Frage in Bezug auf Berechnungen des sichtbaren Bereichs:

Folgender Aufbau:

Hauptfenster: JFrame

RootView-Ebene: rootContainer (Typ: JScrollPane)

Viewport des rootContainer: mainPanel (Typ: JPanel)

mainPanel enthält weitere Unterpanels vom Typ JPanel (z. B. kindPanel)

kindPanel enthält mehrere Suggestfield-Elemente, diese sind abgeleitet von JTextfield. Das Suggestfield entspricht einer Google-Suche (Textfeld mit angelagerter Vorschlagsliste, die anhand der Eingabe durchsucht und verkürzt wird).

Zu diesem Zweck enthält das Suggestfield einen JDialog (Besitzer: Hauptfenster-Frame (Typ: JFrame))

JDialog enthält wiederum ein JScrollPane, dessen ViewPort ist ein JList-Feld.

Angelehnt hab ich mich dabei hier:

JSuggestField - The JTextField that makes suggestions | rakudave.ch

Allerdings zeigt dieses die Liste immer an, egal ob im sichtbaren Bereich oder nicht. Deshalb enthält mein Suggestfield die unten aufgeführte Prüffunktion.

Leider ist der Code sehr umfangreich, deshalb die obige Beschreibung ohne Beispiel-Code. Die Aufgabe ist nun, das aufklappbare JList-Feld nur dann anzuzeigen (Pfeiltaste nach unten), wenn es vollständig in den sichtbaren Bereich reinpasst, bzw. es beim Scrolling zu prüfen und entsprechend auszublenden. Das funktioniert auch ganz gut, lediglich nach dem Start der Komponente kommt es bei Suggestfields, die knapp am unteren Rand des rootContainers liegen vor, dass er das Listenfeld in die linke obere Ecke (vermutlich Koordinaten 0,0 des rootContainers oder mainPanels) setzt. Hier die Prüffunktion:

Java:
private boolean isSuggestFieldInVisibleArea()
{
        //location-Variable Attribut von Suggestfield
        //ScreenLocation des SuggestField
        location = getLocationOnScreen();
        //ScreenLocation des ScrollPane, dass das mainPanel enthält
         Point ctPt = rootContainer.getLocationOnScreen();
        //Sichtbare Höhe des SuggestField
         location.y += getVisibleRect().height;

         if (location.y > ctPt.y &&
        location.y + list.getVisibleRect().height < ctPt.y
                + rootContainer.getVisibleRect().height)
         {
             return true;
         }
         else
         {
             return false;
         }
}

Meine Vermutung:
Ich müsste mit rootContainer.getViewport().getViewRect() arbeiten und das mit SwingUtilities.convertPointToScreen() passend konvertieren, aber irgendwo ist noch der Wurm drin. Könnte es sein, dass hier auch die Nicht-Thread-Sicherheit von Swing mitreinspielt?

Schon mal danke im Voraus, ich hoffe, ich konnte den Aufbau und das Problem halbwegs rüberbringen.

Gruß
wmf
 

wmf

Mitglied
Fläche? Ich arbeite aktuell nur mit Längen in y-Richtung. Die Idee wäre sowas in der Art:

Java:
Rectangle rect = rootContainer.getViewport().getViewRect();
ctPt = new Point(rect.x, rect.y)
SwingUtilities.convertPointToScreen(ctPt, rootContainer);

Allerdings weiss ich bei convertPointToScreen() nie, ob ich bei der Komponente getParent() benutzen muss oder nicht. Den if-Block könnte ich dann so in etwa weiterbenutzen. rootContainer.getVisibleRect().height eben durch rootContainer.getViewport().getViewRect().height ersetzen. Aber auch das arbeitet nicht so, wie ich es mir erhoffe, deshalb auch hier die Frage.
 
Zuletzt bearbeitet:

wmf

Mitglied
Das Problem ist gelöst und lag an anderer Stelle (mir war ein ungeprüftes setSuggestsVisible durchgerutscht, das den Effekt verursachte). Die Prüffunktion arbeitet korrekt, auch die Umstellung von getLocationOnScreen() auf getViewport().getViewRect() + SwingUtilities.convertPointToScreen(...) ist nicht notwendig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Swing JPanel Scala - sichtbarer Bereich "schattieren" AWT, Swing, JavaFX & SWT 2
S JMenuBar bei sichtbarer JGlassPane AWT, Swing, JavaFX & SWT 1
M ScreenCapture bestimmten Bereich bestimmen AWT, Swing, JavaFX & SWT 3
B JavaFX Bilder in einem Gewissen bereich halten AWT, Swing, JavaFX & SWT 1
S JavaFX Fenster aufkommen lassen, wenn mit der Maus über bestimmten Bereich fahren AWT, Swing, JavaFX & SWT 1
D Java FX Image in einer Webanwendung annotieren und den Bereich ausschneiden AWT, Swing, JavaFX & SWT 0
J bestimmten Bereich eines JPanels drucken AWT, Swing, JavaFX & SWT 2
E JavaFX MenuBar und ToolBar zu einem Bereich AWT, Swing, JavaFX & SWT 3
S Swing Nur den sichtbaren Bereich eines TextPane mit Inhalt darstellem AWT, Swing, JavaFX & SWT 0
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
B 2D-Grafik String drehen/platzieren/formatieren in bestimmten Bereich AWT, Swing, JavaFX & SWT 1
K JavaFX Vorschau Bereich/Fenster einer bestehenden Group AWT, Swing, JavaFX & SWT 3
D Graphics2D einen Bereich füllen AWT, Swing, JavaFX & SWT 1
A JFreeChart BarChart invertierte anzeige oder werte bereich von-bis AWT, Swing, JavaFX & SWT 4
B 2D-Grafik paintComponent für rechteckigen Bereich? AWT, Swing, JavaFX & SWT 6
G LayoutManager BorderLayout WEST Bereich auf maximale Größe beschränken AWT, Swing, JavaFX & SWT 19
fastjack 2D-Grafik Scrollbarer Bereich AWT, Swing, JavaFX & SWT 4
S Bestimmen ob Bereich im Bild eher Schwarz oder Weiss ist? AWT, Swing, JavaFX & SWT 13
D JTabbedPane - Farbe ändern im Bereich hinter den Reitern AWT, Swing, JavaFX & SWT 2
R JTable nur sichtbaren Bereich laden AWT, Swing, JavaFX & SWT 12
L Koordinate im sichtbaren Bereich AWT, Swing, JavaFX & SWT 5
R JPanel - zeichnen in skalierten Bereich - Linie (X-Achse) nicht sichtbar AWT, Swing, JavaFX & SWT 11
G Komponente die im Center und North Bereich liegt zurückgebe? AWT, Swing, JavaFX & SWT 6
S Aufklappbarer Bereich AWT, Swing, JavaFX & SWT 2
V Fixer Bereich bei JScrollPane? AWT, Swing, JavaFX & SWT 2
T BufferedImage + bestimmten bereich ausfüllen AWT, Swing, JavaFX & SWT 3
C Image in bestimmtem Bereich anzeigen AWT, Swing, JavaFX & SWT 3
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
B Swing JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 10
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
MaxG. Swing JScrollPane AWT, Swing, JavaFX & SWT 10
Soloeco Swing JScrollPane AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
Bluedaishi JScrollpane AWT, Swing, JavaFX & SWT 0
L JScrollPane scrollt nicht !! AWT, Swing, JavaFX & SWT 3
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
S JScrollPane und BorderLayout AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
A Swing JScrollPane Problem AWT, Swing, JavaFX & SWT 6
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane in JScrollPane - Problem AWT, Swing, JavaFX & SWT 3
K Bug in JScrollPane? AWT, Swing, JavaFX & SWT 4
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
M JScrollPane Header AWT, Swing, JavaFX & SWT 3
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
V LayoutManager JScrollPane verwirft Elementanordnung AWT, Swing, JavaFX & SWT 3
B JScrollPane Problem AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane AWT, Swing, JavaFX & SWT 7
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
F 2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane AWT, Swing, JavaFX & SWT 4
B JScrollPane Horizontal klappt nicht. AWT, Swing, JavaFX & SWT 4
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
C jPanel auf jScrollPane zentrieren AWT, Swing, JavaFX & SWT 3
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Swing Korrekte JTable.rowAt(point) für JTable in JScrollPane AWT, Swing, JavaFX & SWT 5
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3

Ähnliche Java Themen

Neue Themen


Oben