NetBeans GUI-Elemente schöne anordnen / Größe anpassen / JScrollPane

apple-itob

Mitglied
Hallo Forum,

gleich vorweg: Ich weiß, dass es üblich ist für bestehende Probleme Minimalbeispiele anzufertigen und so weiter, da ich aber etwas in Zeitnot bin und ich auch nicht wirklich weiß, wie ich reduzieren soll, stelle ich mal eine etwas offene Frage und hoffe dennoch auf Hilfe :oops:

Nun zum Thema: Ich arbeite im Rahmen meiner Bachelorarbeit an einer Software für den Physikunterricht, mit der Messwerte zweidimensional erfasst und dargestellt werden (in einem Gitter). Eigentlich soll die Software so aussehen (klick für größeres Bild):



  1. Also oben eine Menüleiste
  2. Im größten Beriech links das Gitter, dass in einem ScrollPane angezeigt werden soll, so dass man es scrollen kann, wenn der ausschnitt zu klein wird.
  3. Rechts daneben eine Art Werzeugbereich, der ebenfalls scrollen soll, wenn er zu lang ist für das Fenster. Die Breite soll so sein, dass horizontal nicht gescrollt werden muss – nie.
  4. Im Werkzeugbereich sollen die drei Panele sich untereinander anordnen, aber alle die selbe Breite haben.
  5. Die Panele sollen jeweils so lang sein, dass ihr ganze Inhalt hineinpasst, auch wenn der man größer wird, z.B. weil die Stausmeldung im Info-Panel zweizeilig ist.

Die ganzen Funktion zu implementieren ist kein Problem, aber die GUI bekomme ich in Netbeans einfach nicht so eingestellt, wie ich es gerne hätte, weil ich nicht weiß, an welchen Schrauben und Schaltern ich angreifen muss … hier also das bisherige Ergebnis, das zwar funktioniert aber eben nicht hübsch aussieht:



  1. Menüleiste geht gut.
  2. Das Gitter wird auch angezeigt, aber die Scrollbalken tauchen nicht auf, wenn das Gitter größer wird, vermutlich, weil das Panel, in dem ich das Gitter zeichne seine Größe behält.
  3. Das Scrollen im Werkzeugbreich funktioniert einigermaßen, allerdings erscheinen auch horizontale Balken, wenn der vertikale seinen Platz einnimmt. Ich kann die horizontalen Balken zwar unterdrücken, aber es wird trotzdem von den Werkzeugpanelen etwas abgeschnitten
  4. Wie man sieht haben sie werde die gleiche Breite noch ordnen sie sich richtig an.
  5. Die Panele behalten immer die gleiche Größe, auch wenn sich während der Laufzeit die Größe ändert.

Ich bin dankbar für alle möglichen Tips, an welchen Stellen ich was probieren kann oder wo ich gutes Material dazu finde, wie man Netbeans in Bezug auf GUI bedient, denn diese Suche war bei mir beisher weniger erfolgreich. Noch besser wäre es, wenn jemand Zeit hätte meinen Code mal anzusehen, dann würde ich demjenigen das ganze Netbeans-Projekt (derzeit knapp 20 Klassen) mailen. In dem Fall würde man natürlich auch im About-Fenster/Impressum erwähnt werden – Geld kann ich dafür leider nicht aufbringen, aber im Gegenzug Unterstützung mit LaTeX anbieten. Soweit ich dass sehe ist das unproblematisch im Bezug auf die Eigenständigkeit, meiner BA, da ich das Programm alleine entworfen und die Funktionen ebenfalls selbstständig implementiert habe.

Ich hoffe, das sich trotz der etwas dreisten Frage jemand finden, der bereit ist zu helfen :)

Viele Grüße
Tobi
 

Anhänge

  • E87CW.jpg
    E87CW.jpg
    161,8 KB · Aufrufe: 33
  • VYiTc.jpg
    VYiTc.jpg
    145,8 KB · Aufrufe: 43

Kevin94

Top Contributor
Die "Schrauben" die man dazu zur Verfügung hat sind in erster Linie der LayoutManager des JFrames auf dem die einzelnen Panels sitzen. Wenn ich das richtig verstanden habe,sitzen die Bedienelemente alle in einem Panel und das in einem Scrollpane. Für dieses Panel würde ich ein GridLayout setzen, dann hätte man das mit der Größe geklärt, oder ein GridBagLayout, wenn die Höhe der einzelnen Panel sich unterscheiden soll. Für das ganze Frame würde ich ein GridBagLayout oder TableLayout(nicht im JDK) empfehlen.

Eine gute Übersicht bietet das Tutorial in der Docu.
 
A

Akeshihiro

Gast
Das Problem ist nur, dass hier NetBeans verwendet wird (vermutlich gerade wegen Klickibunti-Editor). NetBeans verwendet den eigenen LayoutManager (weiß grad nicht, wie der heißt). Von Hand dran rumwerkeln geht nicht, da NetBeans den gesamten guirelevanten Code sperrt. Und selbst wenn man von außen was an den Java-Files dreht, NetBeans wird das eh wieder verwerfen, da für NetBeans lediglich die Konfiguration in den .form-Dateien wichtig ist. Und ich wüsste auch nicht, wie man den LayoutManager bei NetBeans umstellt, das habe ich in der Vergangenheit jedenfalls nie gekonnt und wie ich die kenne, wird das auch noch immer nicht gehen. Deswegeb fasse ich auch kein NetBeans-Projekt mehr an, das endet nur in einer Sauerei, jedenfalls wenn GUI dabei ist.

Und da ich Klickibunti-GUI-Editoren ohnehin nicht leiden kann, weil nicht ein einziger richtig funktioniert und die zu viel Schwachsinn machen und zwar egal bei welcher IDE, programmier ich die einfach runter. Skizzen sollte man sowieso machen und erst einmal auf diese Weise Fehler ausbügeln und wenns passt, dann wird es umgesetzt, ob nun mit oder ohne GUI-Editor. Verwenden tu ich das MigLayout, ist sehr einfach, schnell gemacht und super stabil. Das TableLayout kann man aber auch verwenden. Und wer meint, dass man eine zusammengeklickte GUI schneller nachträglich bearbeiten kann, der macht irgendwas falsch.

So, das war jetzt alles offtopic. Aber leider kann auch nicht wirklich helfen, denn wie gesagt, ich arbeiten eigentlich nicht mit NetBeans, jedenfalls nicht wenn es um GUI geht, daher weiß ich da gerade auch keinen Rat. Ich weiß aber, dass man in NetBeans die Panel auch andocken lassen konnte, z. B. an die Seitenränder. Dadurch wurde auch das Wachstumsverhalten eingestellt, sprich die Komponenten wurden dann entsprechend gezerrt oder gestaucht. Das ist bestimmt auch nur eine Kleinigkeit, aber ich kann es grad echt nicht sagen.

Ich bin aber auch bereit mir das Projekt mal anzuschauen und versuchen was dran zu drehen.
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Also ich finde es schon ziemlich bedenklich für eine Abschlussarbeit einen GUI Editor zu verwenden, da doch genau der Aufbau und das Design einer GUI Inhalt einer solchen Arbeit sein sollten.

Als sehr guten und einfach zu konfigurierenden LayoutManager möchte ich noch JGoodies Forms Layout anbringen.
 

L-ectron-X

Gesperrter Benutzer
Und ich wüsste auch nicht, wie man den LayoutManager bei NetBeans umstellt, das habe ich in der Vergangenheit jedenfalls nie gekonnt und wie ich die kenne, wird das auch noch immer nicht gehen. Deswegeb fasse ich auch kein NetBeans-Projekt mehr an, das endet nur in einer Sauerei, jedenfalls wenn GUI dabei ist.

Und da ich Klickibunti-GUI-Editoren ohnehin nicht leiden kann, weil nicht ein einziger richtig funktioniert und die zu viel Schwachsinn machen und zwar egal bei welcher IDE...
:D Witzig. Über das eigene Unvermögen meckern, aber anderen die Schuld in die Schuhe schieben...
Natürlich kann man auch in Netbeans den LayoutManager für eine GUI-Component vorgeben und anpassen.
Rechtsklick auf die Komponente und schon... (siehe unten)



@apple-itob: Für dieses Layout ist ein verschachteltes BorderLayout recht gut geeignet. Im CENTER dein Gitter-Panel, im EAST deine Optionen, die ihrerseits bspw. mit BoxLayout oder GridBagLayout in einem eigenen Panel sitzen.


-Bild für Akeshihiro
 

Anhänge

  • Setting-LayoutManager.jpg
    Setting-LayoutManager.jpg
    73,3 KB · Aufrufe: 46

apple-itob

Mitglied
Guten Morgen,

danke für euere Hinweise, ich habe inzwischen noch ein Bisschen geklickt, und fast alles hinbekommen, was ich wollte. Was ich noch nicht verstanden habe ist, wie man ein Panel dazu bringt die Größe zu haben, die es eben braucht, um seinen inhalt einzuschließen (bezieht sich auf meine Seitenleiste). Irgendwie scheint NetBeans die Größe immer fest einzustellen und das nichtmal abhängig davon, wie groß das Panel im Editor dargestellt wird …

Zu allen OffTopic-Beiträgen: Natürlich ist es schöner, die GUI von Hand zu programmieren und natürlich habe ich mir auch vorher Gedanken über die Anordnung gemacht, da ich aber nur wenig Zeit habe, mich in Java einzuarbeiten, bin ich einfach nicht schnell genug alles von Hand zu machen – auch wenn ich mich natürlich mit der Swing-API beschäftigt habe, sonst wüsste ich gar nicht, was NetBeans treibt.

Also ich finde es schon ziemlich bedenklich für eine Abschlussarbeit einen GUI Editor zu verwenden, da doch genau der Aufbau und das Design einer GUI Inhalt einer solchen Arbeit sein sollten. Es ärgert mich auch, dass der NetBenas-Code eher unsortiert ist, aber das muss jetzt erstmal so bleiben, weil andere Dinge Priorität haben.

Als sehr guten und einfach zu konfigurierenden LayoutManager möchte ich noch JGoodies Forms Layout anbringen.
Klar wäre das angemessen – für eine Arbeit bei den Informatiker. Ich schreibe aber in der Physikdidaktik, da geht es um die Anwendung der Anwendung und wozu sie gut ist, nicht wie man die Anwendung als solche programmiert …


Ich habe übrigens mit Eclipse (also ohne GUI-Editor) angefangen, war dann aber einfach nicht dazu in der Lage Eclips beizubiegen, einen Startbildschrim anzuzeigen bzw. ein eigenes Manifest zu benutzen. Bei NetBeans war das einfach und so bin ich dort hängen geblieben.
 

L-ectron-X

Gesperrter Benutzer
Was ich noch nicht verstanden habe ist, wie man ein Panel dazu bringt die Größe zu haben, die es eben braucht, um seinen inhalt einzuschließen (bezieht sich auf meine Seitenleiste). Irgendwie scheint NetBeans die Größe immer fest einzustellen und das nichtmal abhängig davon, wie groß das Panel im Editor dargestellt wird …
Dafür sind LayoutManager zuständig. Und diese haben eine spezielle Layout-Strategie und richten sich in den meisten Fällen nach der PreferredSize der einzubindenen Komponente.
Mit der passenden Kombination von LayoutManagern sollte die gewünschte Darstellung kein Problem sein. ^^
 
G

Gast2

Gast
Klar wäre das angemessen – für eine Arbeit bei den Informatiker. Ich schreibe aber in der Physikdidaktik, da geht es um die Anwendung der Anwendung und wozu sie gut ist, nicht wie man die Anwendung als solche programmiert …

Ich habe übrigens mit Eclipse (also ohne GUI-Editor) angefangen, war dann aber einfach nicht dazu in der Lage Eclips beizubiegen, einen Startbildschrim anzuzeigen bzw. ein eigenes Manifest zu benutzen. Bei NetBeans war das einfach und so bin ich dort hängen geblieben.

Sorry bin davon ausgegangen, dass du Info studierst. Der von mir genannte layout Manager ist trotzdem toll ^^
 

apple-itob

Mitglied
Dafür sind LayoutManager zuständig. Und diese haben eine spezielle Layout-Strategie und richten sich in den meisten Fällen nach der PreferredSize der einzubindenen Komponente.
Mit der passenden Kombination von LayoutManagern sollte die gewünschte Darstellung kein Problem sein. ^^

OK, dann muss ich da mal ein Bisschen gucken.

Sorry bin davon ausgegangen, dass du Info studierst. Der von mir genannte layout Manager ist trotzdem toll ^^
Mach ja nix, deine Annahme ist ja auch durchaus naheliegend :)


Ich hätte noch eine andere Frage, die vielleicht aber auch einen eigenen Thread wert ist. Ich habe im Code an diversen Stellen System.out/err.print(ln)-Anweisungen. Muss ich die vor dem Veröffentlichen entfernen oder kann man die zu sagen einfach ins Leere laufen lassen, wenn der Anwender die .jar startet?
 
A

Akeshihiro

Gast
Die werden dann ohnehin ins Leere laufen. Allerdings würden sie auftauchen, wenn man die Anwendung über die Kommandozeile starten würde oder aber ein andere Prozess den Standardausgabe-/-errorstream auslesen würde. Wenn du das vermeiden willst, dann musst du die Anweisungen entweder entfernen oder beim Start der Anwendung umleiten, z. B. so:
Java:
java.io.PrintStream nullPrintStream = new java.io.PrintStream(new java.io.ByteArrayOutputStream(0)) {
	@Override
	public void write(byte[] buf, int off, int len) {}
	
	@Override
	public void write(int b) {}
	
	@Override
	public void write(byte[] b) throws IOException {}
};
System.setOut(nullPrintStream);
System.setErr(nullPrintStream);
 
A

Akeshihiro

Gast
Üblich ... Naja, ich würde eher sagen auf System.XXX komplett verzichten und stattdessen nen Logging-Framework (z. B. log4j) verwenden. Dann kann man das Logging bei Bedarf für die gesamte Anwendung und/order bestimmte Packages und Klassen konfigurieren. Dann wäre sowas auch mit dem Ändern an einer Stelle in der Konfigurationsdatei getan.

Für deinen Fall ... Naja, brauchst du die Ausgaben oder waren das nur Debugging-Informationen während der Entwicklung? Dann würde ich die einfach rauswerfen bzw. kurzfristig eben so wie von mir gepostet abwürgen. Auf längere Sicht wäre ein Logging-Framework aber sicherlich nicht doof.
 

apple-itob

Mitglied
Ich brauchte die Teile nur zum Testen/Debuggen, dann werde ich alles einfach rauswerfen … über das Logging denke ich mal nach, wenn die BA eingereicht ist :)
 

Ähnliche Java Themen

Neue Themen


Oben