Zum Inhalt springen

ScrollBalken auf JFrame setzen


Empfohlene Beiträge

Geschrieben (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 von ShamaN
Geschrieben (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 von ShamaN
Geschrieben

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....

Geschrieben

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...

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...