ShamaN Geschrieben 16. März 2009 Geschrieben 16. März 2009 (bearbeitet) Hallo, Ich benötige einen Scrollbalken für mein Frame, welcher automatisch erscheint, falls der Inhalt des Frames zu groß wird(während der Laufzeit). Die maximale Größe sollte einstellbar sein oder eben den Desktop-Einstellungen entsprechen. Horizontale Scrollbalken sind nicht nötig. Hier mal ein Bild meiner Oberfläche: imgBOX.de - Flirten - Chatten - an Freunde verschicken Mein JFrame hat das Layout BorderLayout, welches zwei GridLayouts enthält. Eins in Center, welches die ersten 5 Spalten enthält, das 2te die letzten beiden mit den Buttons. Das Bild zeigt die maximale Anzahl an Datensätzen(24), wenn ich einen weiteren anfüge dann verschwindet dieser bereits außerhalb des Bildschirms(1400x900). Mein JFrame hat einen MouseListener, welcher durch Anklicken der Kreise, Diese ausfüllt. Als ich das BorderLayout einem eigenen JPanel zugefügt habe, Dieses in ein JScrollPane gepackt und dem JFrame zugefügt habe, hat der MouseListener nicht mehr funktioniert. Übrigens ein weiteres Problem... Der Name des Programms, "DVS", wird nicht in der Mac-Eigenen Menü-leiste angezeigt.Stattdessen steht dort der package-name. Hab versucht das mit folgendem Code richtig einzustellen. Hat allerdings nicht funktioniert. super("DVS"); String lcOSName = System.getProperty("os.name").toLowerCase(); boolean IS_MAC = lcOSName.startsWith("mac os x"); if(IS_MAC == true) { System.setProperty("com.apple.mrj.application.apple.menu.about.name", "DVS"); System.setProperty("com.apple.macos.smallTabs", "true"); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } SwingUtilities.updateComponentTreeUI(this); } Bearbeitet 16. März 2009 von ShamaN Zitieren
VaNaTiC Geschrieben 16. März 2009 Geschrieben 16. März 2009 Du brauchst ein JScrollPane als addContentPane() oder setContentPane(). Zitieren
ShamaN Geschrieben 16. März 2009 Autor Geschrieben 16. März 2009 (bearbeitet) JPanel asdf = new JPanel(); BorderLayout layout = new BorderLayout(); asdf.setLayout(layout); asdf.add(p1, "Center"); asdf.add(p3, "East"); JScrollPane scroll = new JScrollPane(asdf); scroll.setVerticalScrollBarPolicy(scroll.VERTICAL_SCROLLBAR_ALWAYS); this.getContentPane().add(scroll); sieht auf den ersten Blick gut aus, der ScrollBalken ist da wo er sein soll aber man kann auch nicht scrollen wenn datensätze über den Desktop hinaus gehen und der MouseListener gibt den geist auf Also wie muss des gemacht werden? Hab mich bisher von den Methoden eher fern gehalten ^^ Bekommt man mit drawOval eigtl auch iwie (richtig) runde kreise hin? Bearbeitet 16. März 2009 von ShamaN Zitieren
ShamaN Geschrieben 16. März 2009 Autor Geschrieben 16. März 2009 Ok also mehr oder weniger funktioniert das Ganze jetzt, Hab den MouseListener auf das JScrollPane getan und der Scrollbalken lässt sicht auch Scrollen wenn ich genügen Komponenten einfüge, allerdings werden die ganzen Komponenten erst dünner. Die sollten natürlich so groß bleiben wie sie sind. Kann man das einstellen? setMinimumSize setMaximumSize setSize sind total unbrauchbare methoden wenns um das einstellen der Größe von Komponenten geht.... Zitieren
Dragon8 Geschrieben 17. März 2009 Geschrieben 17. März 2009 Das die Methoden total unbrauchbar sind, stimmt so nicht. Sie machen genau das, was sie machen sollen. Wenn du die Methoden händisch aufrufst und die Größe einstellst, wird das zu diesem Zeitpunkt auch genau nach deinen Wünsche dort eingetragen, jedoch verwendest du LayoutManager, das heißt, die berechnen für dich die Größe der Komponenten und überschreiben deine Vorgaben dann einfach wieder, sobald das Fenster geladen oder verändert wird. Aber trotzdem ist das doch ganz normal, dass deine restlichen Komponenten jetzt nicht genauso groß beiben werden, wenn an der Seite noch Platz für eine ScrollBar gelassen werden muss... Zitieren
VaNaTiC Geschrieben 17. März 2009 Geschrieben 17. März 2009 Wichtig bei JScrollPane ist zu wissen, dass man weniger den ScrollPane mit einer Größe setzen muss, sondern immer die Größe des Panels was sich im ScrollPane befindet. D.h. in Deinem Beispiel musst Du die Größe von JScrollPane so belassen oder nur für dessen Container setzen. Das kann man, wie Du schon bei JPanel asdf richtig gemacht hast entweder über die setSize() oder variabel. Fakt ist, wenn JScrollPane mittels getContentPane().add() eingefügt wird, muss es schon so groß sein, wie Du willst. Ansonsten dessen setSize() oder BorderLayout.CENTER. Beispielsweise ist das ScrollPane 400x300 Pixel. Wenn dann das JScrollPane wiederum ein JPanel als Element hat, muss die Größe des JPanels gesetzt sein auf die Größe, die zur Darstellung der Elemente notwendig ist. Beispielsweise ist das ScrollPane 800x600 Pixel. Hier ist allerdings Vorsicht mit variablen Größen geboten, die sich ergeben aus LayoutContainer. Das funktioniert bei mir auch nicht immer. Ich hab leider noch nicht herausgefunden warum. Ich vermute das es problematisch wird, sobald man verschiedene Layout verbindet. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.