java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Java - Programmierung > AWT, Swing & SWT

AWT, Swing & SWT Fragen zur Programmierung von Benutzer-Oberflächen (GUI)

Antwort     Ist dieses Thema erledigt?
Themen-Optionen Thema durchsuchen Ansicht
Alt 03.07.2009, 09:29   #1 (permalink)
Neuer Benutzer
Byte
 
Registriert seit: 22.06.2009
Beiträge: 9
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard ScrollPane: getPreferredSize()

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
GreenLight ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 09:42   #2 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 04.12.2006
Beiträge: 1.757
Abgegebene Danke: 0
Erhielt 2 Danke für 2 Beiträge
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
__________________
Profi-Noob!!
Verjigorm ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 09:53   #3 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 18.11.2003
Beiträge: 4.875
Abgegebene Danke: 5
Erhielt 66 Danke für 64 Beiträge
Das Scrollable-Interface auf dem Viewport-View implementieren, kann helfen.

Ebenius
__________________
The main rules of optimization
Rule 1: Don't do it.
Rule 2: (For experts only) Don't do it yet.
Ebenius ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 10:56   #4 (permalink)
Neuer Benutzer
Byte
Themenstarter
 
Registriert seit: 22.06.2009
Beiträge: 9
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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
GreenLight ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 11:10   #5 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 18.11.2003
Beiträge: 4.875
Abgegebene Danke: 5
Erhielt 66 Danke für 64 Beiträge
Zitat: GreenLight
Beitrag anzeigen
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
__________________
The main rules of optimization
Rule 1: Don't do it.
Rule 2: (For experts only) Don't do it yet.
Ebenius ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 11:16   #6 (permalink)
Stammbenutzer
Megabyte
 
Registriert seit: 04.12.2006
Beiträge: 1.757
Abgegebene Danke: 0
Erhielt 2 Danke für 2 Beiträge
Zitat: Ebenius
Beitrag anzeigen
Der JScrollPane selbst (genauso wie dem JViewport) setzt Du am besten überhaupt keine Größenangaben. Dann stimmt auch die Größe.
Ausser er benutzt Null-Layout
__________________
Profi-Noob!!
Verjigorm ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 11:21   #7 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 18.11.2003
Beiträge: 4.875
Abgegebene Danke: 5
Erhielt 66 Danke für 64 Beiträge
Zitat: Verjigorm
Beitrag anzeigen
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
__________________
The main rules of optimization
Rule 1: Don't do it.
Rule 2: (For experts only) Don't do it yet.

Geändert von Ebenius (03.07.2009 um 11:24 Uhr)
Ebenius ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 12:21   #8 (permalink)
Neuer Benutzer
Byte
Themenstarter
 
Registriert seit: 22.06.2009
Beiträge: 9
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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);
    }
}
GreenLight ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 13:43   #9 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 18.11.2003
Beiträge: 4.875
Abgegebene Danke: 5
Erhielt 66 Danke für 64 Beiträge
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
__________________
The main rules of optimization
Rule 1: Don't do it.
Rule 2: (For experts only) Don't do it yet.
Ebenius ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 14:02   #10 (permalink)
Neuer Benutzer
Byte
Themenstarter
 
Registriert seit: 22.06.2009
Beiträge: 9
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Zitat: Ebenius
Beitrag anzeigen
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.

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?
GreenLight ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 17:25   #11 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 18.11.2003
Beiträge: 4.875
Abgegebene Danke: 5
Erhielt 66 Danke für 64 Beiträge
Zitat: GreenLight
Beitrag anzeigen
Sollte ich für jedes dieser TextFelder von vornherein eine PreferredSize setzen, oder geht das auch anders?
Das geht anders: JTextField.JTextField(int).

Ebenius
__________________
The main rules of optimization
Rule 1: Don't do it.
Rule 2: (For experts only) Don't do it yet.
Ebenius ist gerade online  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 03.07.2009, 19:20   #12 (permalink)
Neuer Benutzer
Byte
Themenstarter
 
Registriert seit: 22.06.2009
Beiträge: 9
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
THX
GreenLight ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort     Ist dieses Thema erledigt?

Lesezeichen

Latex Maths & Physics Editor ...

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ScrollPane passt sich nicht an NickK AWT, Swing & SWT 4 29.10.2008 13:00
2 Problem mit dem ScrollPane Deployment 2 28.04.2007 11:05
JMenu verschwindet unter ScrollPane maul AWT, Swing & SWT 3 10.01.2006 12:34
Ärger mit ScrollPane, JTable und der Resize-Einstellung EinenDenEsNochNichtGibt AWT, Swing & SWT 2 14.10.2005 10:17
Frame in ScrollPane einfügen ninja AWT, Swing & SWT 5 07.09.2004 17:24


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:34 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de