ScrollPane: getPreferredSize()

Status
Nicht offen für weitere Antworten.

GreenLight

Mitglied
Hallo,

ich hab da mal eine Frage zur ScrollPane. Gibt es eine Möglichkeit, dass die mir immer genau die Größe ausgibt, die benötigt wird, die das Fenster benötigen würde, um alles anzuzeigen und noch ohne Scrollbars auskommt?

Mit preferredSize() klappt das irgendwie nämlich nicht.
Die ScrollPane enthält ein JPanel, welches halt beliebig viele Elemente enthalten kann.

Sonnige Grüße und THX ;-)
 

Verjigorm

Top Contributor
Du musst die Größe der Scrollpane auf die Größe des inhaltenden JPanels setzen.

Kann aber auch ins Auge gehen, wenn das JPanel zu groß wird :)
 

GreenLight

Mitglied
Hi, thx.
ja hatte auch schon mit viewport rumgespielt, habe es jetzt aber auf relative einfache Weise gelöst.

Ich nehme das panel, welches von der scrollpane beinhaltet wird und addiere auf
die height noch 30 und auf die weight noch 100 drauf. dann passt es immer.

Aber warum gerade 30 und 100? Keine Ahnung, aber der Langzeittest hats es bestätigt ;-)
 

Ebenius

Top Contributor
Aber warum gerade 30 und 100? Keine Ahnung, aber der Langzeittest hats es bestätigt ;-)
Das kann ich Dir nicht erklären, weil ich nicht genau weiß, was Du tust. Feste Größen hinzuzufügen funktioniert normaler Weise nur mit einem LookAndFeel. Und meist auch nur, wenn die Schriftarten gleich sind. Und ggf. die Monitoreinstellungen bzgl. Dots/Inch. Das ist also eigentlich keine Lösung.

Aber Deiner Erklärung entnehme ich, dass Du einen kleinen Denkfehler hast. Eine JScrollPane trägt einen JViewport. Mit diesem solltest Du gar nichts machen. Dieser JViewport wiederum trägt eine View (irgendein Component, in diesem Fall Dein Panel). Diese View (und nicht! der JViewport) bestimmt, wie groß die JScrollPane werden will. Der JScrollPane selbst (genauso wie dem JViewport) setzt Du am besten überhaupt keine Größenangaben. Dann stimmt auch die Größe.

Wenn Du das Verhalten der JScrollPane besser einstellen möchtest, dann sollte die View (wieder: nicht! der JViewport) das Scrollable-Interface implementieren.

Ebenius
 

Ebenius

Top Contributor
Ausser er benutzt Null-Layout ;)
Das "am besten" schließt das aus!

Davon abgesehen: Selbst wenn man null-Layout benutzt, sollte man der JScrollPane keine Größe setzen, sondern diese lieber über doLayout() oder validate() auf dem JScrollPane berechnen lassen. Das JScrollPane bringt ja schließlich sein eigenes Layout wieder mit.

Ebenius
 
Zuletzt bearbeitet:

GreenLight

Mitglied
ja, da hab ich mich wohl falsch ausgedrückt. Mit dem Viewport habe ich auch nichts gemacht.
Mmmh, du hast recht, mit meinen festen Größen ist so nicht ganz das wahre. So hab ich es bis jetzt gemacht, dann wird es vielleicht klarer:

In der for-Schleife können halt beliebig viele Elemente stehen und dem Panel hinzugefügt werden.

Java:
public class test extends JFrame{

	private JPanel panelData;
	private JPanel panelButton;
	private JScrollPane scroll;
	
	public test(){
		
		panelData = new JPanel();
		panelButton = new JPanel();
		createButtonPanel( panelButton); //Panel mit FlowLayout und ein paar Buttons
		
		scroll = new JScrollPane( JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
				  JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		scroll.setViewportView( panelData);
		
		Container c = this.getContentPane(); 
		BorderLayout border = new BorderLayout();
		c.setLayout( border);
		c.add( panelButton, BorderLayout.SOUTH);
		c.add( scroll, BorderLayout.CENTER);
			
		GridBagLayout gbl = new GridBagLayout();
		panelData.setLayout( gbl);
		
		for( int i=0; i<BELIEBIG; i++){
			JTextField txtBeispiel = new JTextField();
			addComponent( panelData, gbl, txtBeispiel, x, y, 1, 1, 0, 0);
		}
		
		setSize();
	}
	
	private void setSize(){
		Dimension d = panelData.getPreferredSize();
		Dimension dScreenSize = Toolkit.getDefaultToolkit().getScreenSize();
	    Dimension b = panelButton.getPreferredSize();
	    
	    d.height = (int) ((d.height + b.height) + 30);
	    d.width = (int) ((d.width + b.width) + 100);
	    
	    if( d.height > dScreenSize.height){
	    	d.height = dScreenSize.height;
	    }
	    
	    if( d.width > dScreenSize.width){
	    	d.width = dScreenSize.width;
	    }
	    
	    super.setSize( d);
	}
}
 

Ebenius

Top Contributor
Achso. Du machst doch dort was ganz anderes... Du setzt die Größe des Fensters. Ein Fenster hat natürlich auch noch eine Titelleiste und einen Rahmen. Und Dein Button im Süden will natürlich auch Platz. Deswegen brauchst Du die zusätzlichen 100 / 30 px. Ist auch mit jedem System × LookAndFeel unterschiedlich.

Wenn Du die ScreenSize als Grenze verwendest, solltest Du auch noch die ScreenInsets (zum Beispiel wegen der Start-Leiste im Windows) abziehen.

Ansonsten: Benutz doch einfach pack(), das macht das Layout in genau der richtigen Größe. Danach kannst Du dann die Größe des Fensters ggf. noch gegen die Grenzwerte korrigieren.

HTH, Ebenius
 

GreenLight

Mitglied
Ansonsten: Benutz doch einfach pack(), das macht das Layout in genau der richtigen Größe. Danach kannst Du dann die Größe des Fensters ggf. noch gegen die Grenzwerte korrigieren.

Genau, das hab ich gesucht - nur irgenwie in der javadoc übersehen! THX. :toll:

Zu pack aber noch eine kleine Frage: Die Fenster werden toll, nur JTextFields, die noch unbefüllt sind werden im Prinzip nicht richtig dargestellt. Die sind im Prinzip nur ein kleiner weißer Strich. Sollte ich für jedes dieser TextFelder von vornherein eine PreferredSize setzen, oder geht das auch anders?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
E GridLayout auf ScrollPane AWT, Swing, JavaFX & SWT 4
N Einer TextArea ein ScrollPane hinzufügen AWT, Swing, JavaFX & SWT 8
TheWhiteShadow JavaFX ScrollPane nimmt nicht genug platz ein AWT, Swing, JavaFX & SWT 3
J Gridpane Breite in Scrollpane automatisch anpassen AWT, Swing, JavaFX & SWT 2
E JavaFX Cursor-Position im ScrollPane AWT, Swing, JavaFX & SWT 0
E Swing Liste in Scrollpane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
C JavaFX ScrollPane schießt über das Ziel hinaus... AWT, Swing, JavaFX & SWT 1
DaCrazyJavaExpert Swing Zwei gleichgroße Panels in einem Scrollpane mit Layout AWT, Swing, JavaFX & SWT 9
T JavaFX Zoom in ScrollPane AWT, Swing, JavaFX & SWT 1
L Java FX Scrollpane automatisch resizen AWT, Swing, JavaFX & SWT 3
P Java ScrollPane und ViewPort AWT, Swing, JavaFX & SWT 2
M JavaFX Scrollpane: Style von Contentpanel default AWT, Swing, JavaFX & SWT 1
S JavaFX Image Skalierung in Scrollpane, Scrollpane resized sich nicht AWT, Swing, JavaFX & SWT 5
V Netbeans: TabbedPane, ScrollPane und Graphics AWT, Swing, JavaFX & SWT 4
S passende PaintComponent ? Zeichnen in TextArea mit Scrollpane ? AWT, Swing, JavaFX & SWT 2
O ScrollPane AWT, Swing, JavaFX & SWT 2
W JavaFX Scrollpane elementweise scrollen AWT, Swing, JavaFX & SWT 4
M SWT ScrollPane Größe zu klein AWT, Swing, JavaFX & SWT 6
Z Swing Welcher Layoutmanager bei ScrollPane? AWT, Swing, JavaFX & SWT 4
S ScrollPane in Textarea und auf Panel AWT, Swing, JavaFX & SWT 4
Bluedaishi Synchrone ScrollPane trennen AWT, Swing, JavaFX & SWT 2
G JTable als fixierte Spalte in Scrollpane scrollt nicht mit... AWT, Swing, JavaFX & SWT 1
M MouseListener auf table oder scrollPane AWT, Swing, JavaFX & SWT 11
W Swing Nicht-Editierbares Textfeld in Panel in ScrollPane AWT, Swing, JavaFX & SWT 9
W Swing Zum Ende einer Scrollpane scrollen AWT, Swing, JavaFX & SWT 2
S Bestimmten Bereich eines Bildes im JFrame mit Scrollpane anzeigen AWT, Swing, JavaFX & SWT 0
Kenan89 Vertikal und horizontal zentrierter Pane in ScrollPane AWT, Swing, JavaFX & SWT 5
Kenan89 Java FX ScrollPane Content mittig setzen AWT, Swing, JavaFX & SWT 5
P ScrollPane nach zeichnen dynamisch resize AWT, Swing, JavaFX & SWT 7
O Swing GroupLayout und Scrollpane AWT, Swing, JavaFX & SWT 3
T scrollpane taucht nicht auf AWT, Swing, JavaFX & SWT 6
D Zoom zur Mouseposition in ScrollPane AWT, Swing, JavaFX & SWT 5
F AWT ScrollPane Problem AWT, Swing, JavaFX & SWT 3
S Swing Bild in JPanel in ScrollPane neu zeichnen AWT, Swing, JavaFX & SWT 2
S Canvas in ScrollPane wird beim scrollen immer neu gezeichnet AWT, Swing, JavaFX & SWT 3
D JTable in Scrollpane AWT, Swing, JavaFX & SWT 3
H ScrollPane AWT, Swing, JavaFX & SWT 3
0 JTable im ScrollPane AWT, Swing, JavaFX & SWT 3
S Swing Scrollpane und JTables AWT, Swing, JavaFX & SWT 6
D Swing JList: ScrollPane auf JPanel ansprechen AWT, Swing, JavaFX & SWT 7
Spin JTable Header wird nicht angezeigt ohne ScrollPane AWT, Swing, JavaFX & SWT 3
F Swing Mehrere Textfelder in Scrollpane einfügen und dann zum Scrollen bringen? AWT, Swing, JavaFX & SWT 4
_dp Swing ScrollPane unterschlägt Großteil der Tabelle AWT, Swing, JavaFX & SWT 7
T ScrollPane Lösgelöst vom JPanel?!? AWT, Swing, JavaFX & SWT 4
D Panel zu Scrollpane adden AWT, Swing, JavaFX & SWT 8
T LayoutManager Panel in Scrollpane mittig ausrichten AWT, Swing, JavaFX & SWT 2
E JList in ScrollPane auf größe bringen AWT, Swing, JavaFX & SWT 5
A ScrollPane + internalFrame AWT, Swing, JavaFX & SWT 2
H ScrollPane scrollt ungefragt drauf los! AWT, Swing, JavaFX & SWT 5
T ScrollPane scrollt nicht einwandfrei AWT, Swing, JavaFX & SWT 3
M Labels in ScrollPane mit Linie verbinden AWT, Swing, JavaFX & SWT 2
P ScrollPane klappt zusammen beim verkleinern des Frames AWT, Swing, JavaFX & SWT 2
S Swing JTree in ScrollPane einen ToolTip geben AWT, Swing, JavaFX & SWT 2
T ScrollBar aus ScrollPane verstecken AWT, Swing, JavaFX & SWT 2
N ScrollPane in ein Fenster einfügen AWT, Swing, JavaFX & SWT 2
N ScrollPane passt sich nicht an AWT, Swing, JavaFX & SWT 4
D ScrollPane Anpassungen AWT, Swing, JavaFX & SWT 7
M Problem mit jPanel (FlowLayout) in ScrollPane AWT, Swing, JavaFX & SWT 4
K TextArea auf Scrollpane AWT, Swing, JavaFX & SWT 3
G Tabellenköpfe trotz Scrollpane ausschalten AWT, Swing, JavaFX & SWT 5
P Automatisches Mitscrollen der ScrollPane AWT, Swing, JavaFX & SWT 2
M Problem beim Einsatz von ScrollPane (Fenster spielt verrückt AWT, Swing, JavaFX & SWT 2
R ImageViewer - Bild mit ScrollPane AWT, Swing, JavaFX & SWT 4
K Row und ColumnHeader in ScrollPane werden "verwischt&qu AWT, Swing, JavaFX & SWT 4
F Resize in ScrollPane AWT, Swing, JavaFX & SWT 4
M Swing: ScrollPane Button mit Pfeil ändern wie? AWT, Swing, JavaFX & SWT 2
F Scrollpane scrollt immer zur TextArea AWT, Swing, JavaFX & SWT 8
vogella JTable und JScrollPane - ScrollPane immer in der Mitte AWT, Swing, JavaFX & SWT 2
B Komponenten über ScrollPane hinaus angezeigt. AWT, Swing, JavaFX & SWT 3
S JTable (Scrollpane und ColumnNames) und JComboBox AWT, Swing, JavaFX & SWT 2
T Warum keine ScrollBars in diesem ScrollPane? AWT, Swing, JavaFX & SWT 3
A Scrollspeed bei Scrollpane erhöhen? AWT, Swing, JavaFX & SWT 2
A Scrollpane verschmiert beim scrollen AWT, Swing, JavaFX & SWT 5
P Resize von ScrollPane Inhalten AWT, Swing, JavaFX & SWT 2
S ScrollPane zeigt scrollbalken nicht an AWT, Swing, JavaFX & SWT 12
S Problem mit Scrollpane & Bild AWT, Swing, JavaFX & SWT 3
A JTable in ScrollPane scrollt nicht horizontal AWT, Swing, JavaFX & SWT 2
M JMenu verschwindet unter ScrollPane AWT, Swing, JavaFX & SWT 3
G jTable + ScrollPane (+ TableModel) AWT, Swing, JavaFX & SWT 7
G ScrollPane anfärben AWT, Swing, JavaFX & SWT 2
E Ärger mit ScrollPane, JTable und der Resize-Einstellung AWT, Swing, JavaFX & SWT 2
J Inhalt eines Scrollpane speichern AWT, Swing, JavaFX & SWT 3
M Eigen gemaltes JPanel im ScrollPane. klappt nicht. :-( AWT, Swing, JavaFX & SWT 10
M Wo bleibt mein ScrollPane? AWT, Swing, JavaFX & SWT 3
D Probleme mit TableLayoutManager und ScrollPane AWT, Swing, JavaFX & SWT 3
M Problem bei Verbinden v. jTable, ScrollPane u. JLabel AWT, Swing, JavaFX & SWT 5
G Anwendung um Scrollpane erweitern AWT, Swing, JavaFX & SWT 2
G Scrollpane in null-Layout einfügen AWT, Swing, JavaFX & SWT 5
N Frame in ScrollPane einfügen AWT, Swing, JavaFX & SWT 5
J Balken von ScrollPane immer unten AWT, Swing, JavaFX & SWT 6
Z Probleme mit eigenem Canvas und ScrollPane AWT, Swing, JavaFX & SWT 8
E Layout und getPreferredSize() AWT, Swing, JavaFX & SWT 6
C getPreferredSize() AWT, Swing, JavaFX & SWT 3
P wie kommt getPreferredSize() zustande? AWT, Swing, JavaFX & SWT 6

Ähnliche Java Themen

Neue Themen


Oben