Swing JScrollPane - observen wann eine JScrollBar angezeigt wird?

B

BernhardGiden

Gast
Hallo Forum,

Ich habe zur Zeit eine Swing-Applikation die in einem FlowLayout-Panel einige Buttons einfügt, da das Panel eine fixe Breite hat kann es passieren, dass es "übergeht". Deswegen haben wir das Panel in eine JScrollPane gepackt. Soweit so gut.

Nun möchten wir aber, dass die Höhe des Bereichs so klein wie möglich ist, d.h. die ScrollBar soll nur dann angezeigt werden, falls unbedingt nötig.

Die JScrollPane liegt selbst wiederum in einer MigLayout-Zelle, die (afair) sich immer an die gewünschten Größen des darunterliegenden Panels anpasst.

Wie kann ich nun feststellen wann die JScrollPane die JScrollBar (horizontal) anzeigt, damit ich die Höhe so vergrößern kann, dass der Inhalt des Viewports sichtbar ist, und vor allem: Umgekehrt, damit ich es wieder kleiner machen kann? Es scheint keinen Listener zu geben?

Hier noch zwei kleine Screenshots zur Demo:

(1) Im Normalbetrieb, JScrollBar hidden:
attachment.php

(2) JScrollBar visible - überdeckt alles:
attachment.php


Achja, das weiße Feld rechts daneben ist die InputBox mit der man die Tags eingeben kann.

Lg,
Bernhard
 

Anhänge

  • snap1l.jpg
    snap1l.jpg
    3,7 KB · Aufrufe: 40
  • snap2vx.jpg
    snap2vx.jpg
    4,2 KB · Aufrufe: 40

xehpuk

Top Contributor
Hey!

Meine Idee wäre jetzt, dem Panel einen
Code:
ContainerListener
hinzuzufügen und in der
Code:
componentAdded(ContainerEvent e)
per Aufruf von
Code:
getHorizontalScrollBar().isVisible()
auf das JScrollPane zu überprüfen, ob die JScrollBar eingeblendet wurde (und dementsprechend reagieren).
 
B

BernhardGiden

Gast
Danke! Die Idee ist gut, und ich habe jetzt endlich eine Stelle an der ich reagieren kann, danke. Allerdings scheint isVisible() immer true zu liefern - egal ob die ScrollBar angezeigt wird oder nicht.

Ich habe mal gehört, dass nur bei Top-Level-Containern (bspw. JFrame, etc.) isVisible der Intuition entspricht, ansonsten sind JComponents eigentlich immer visible wenn sie auf einem visible ding liegen, kann das sein?

Wie finde ich raus ob etwas "wirklich" angezeigt wird?

Lg
 
B

BernhardGiden

Gast
.isShowing() hilft da weiter, die JScrollBar wird offenbar aus der JScrollPane entfernt, aber nicht auf visible=false gesetzt. Ich werde versuchen das damit jetzt hinzubekommen, danke einstweilen!

Lg
 
B

BernhardGiden

Gast
Ok, hat das Problem leider odch nicht gelöst.

isShowing() ist im ContainerListener noch false, erst beim nächten Hinzufügen ist es dann true. Hab auch schon versucht da mittels SwingUtilities.invokeLater den Aufruf aus dem Listener auf später zu verschieben, bringt aber leider auch nichts. Kann man da noch etwas machen? Damit das erst *danach* ausgeführt wird? : (

Lg
 
B

BernhardGiden

Gast
Falls es jemandem hilft, ich habe das nun so gelöst:
Java:
// setVisible(false) ist wichtig! Ansonsten default=true, wird erst beim ersten Mal dann in die JScrollPane
		// eingefügt, aber da sich visibility nicht ändert kommt kein componentShown!
		elemsScrollPane.getHorizontalScrollBar().setVisible(false);
		elemsScrollPane.getHorizontalScrollBar().addComponentListener(new ComponentAdapter(){
			private int oldHeight;
			
			@Override
			public void componentShown (final ComponentEvent ev)
			{
				log.debug("Horizontal scroll bar shown in tag panel -> make bigger");
				
				oldHeight = elemsPanel.getHeight();
				
				final int newWidth = elemsScrollPane.getWidth(); // same as before
				final int newHeight = oldHeight + elemsScrollPane.getHorizontalScrollBar().getHeight() + 5;
				elemsScrollPane.setPreferredSize(new Dimension(newWidth, newHeight));
				SwingUtils.setMinimumHeight(ListTextField.this, newHeight);
				
				((JComponent)ListTextField.this.getParent()).revalidate();
			}
			
			@Override
			public void componentHidden (final ComponentEvent ev)
			{
				log.debug("Horizontal scroll bar hidden in tag panel -> make smaller");
				
				final int newWidth = elemsPanel.getWidth(); // same as before
				final int newHeight = oldHeight; // make smaller
				elemsScrollPane.setPreferredSize(new Dimension(newWidth, newHeight));
				ListTextField.this.setMinimumSize(null);
				
				((JComponent)ListTextField.this.getParent()).revalidate();
			}
		});
Fragen dazu:

(1) Cast nach JComponent ist natürlich noch ein dirty hack, das gehört abgeändert. Jemand eine Idee wie man revalidate umsetzt?
(2) Warum reicht elemsScrollPane.setPreferredSize(null); nicht aus um es wieder keiner zu machen? Liegt das am Viewport? Wo müsste ich noch null setzen damit das klappt und ich mir die "oldHeight" nicht merken muss?

Info: SwingUtils.setMinimumHeight setzt die minimum dimension mit getMinimumWidth(), height.

Danke für den Ansatz!

Lg
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
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
S JScrollPane reagiert nicht AWT, Swing, JavaFX & SWT 3
X JScrollPane zu JTable hinzufügen AWT, Swing, JavaFX & SWT 16
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
P Swing JScrollpane AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
V Swing JScrollPane Viewport verschieben AWT, Swing, JavaFX & SWT 2
J JScrollPane Probleme AWT, Swing, JavaFX & SWT 3
S Swing JScrollPane verliert Scrollbars AWT, Swing, JavaFX & SWT 5
D Swing JTable in JScrollpane beliebig verbreitern AWT, Swing, JavaFX & SWT 5
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
J Swing Unteren Abstand für JTable in JScrollPane festlegen AWT, Swing, JavaFX & SWT 10
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
M JScrollPane Problem AWT, Swing, JavaFX & SWT 6
S Swing JScrollpane und ViewPort AWT, Swing, JavaFX & SWT 4
D JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 12
X JScrollPane funzt net... AWT, Swing, JavaFX & SWT 5
H jscrollpane AWT, Swing, JavaFX & SWT 12
RELAXccc Swing JTree + JScrollPane, refresh Problem AWT, Swing, JavaFX & SWT 17
A Problem mit JScrollPane in einer JScrollpane AWT, Swing, JavaFX & SWT 4
B JScrollPane Problem AWT, Swing, JavaFX & SWT 25
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
P Swing JScrollPane-Inhalt: Grösse anpassen AWT, Swing, JavaFX & SWT 6
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4
A JScrollPane AWT, Swing, JavaFX & SWT 16
C Swing JScrollPane und Scroll-Geschwindigkeit AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen

Neue Themen


Oben