Programm von JRE 1.6 auf 1.5 GroupLayout

Klein0r

Erfahrenes Mitglied
Hallo zusammen!

Da ich nicht unbedingt der Profi in Sachen Swing / Layouts und Oberflächengestaltung bin, habe ich mir den Code für die Oberfläche mit NetBeans erstellen lassen! Nun möchte ich allerdings mein Programm auch für JREs in Version 1.5 zum laufen bringen.

Eclipse zeigt mir die einzigen Probleme in der gestaltung der Oberfläche. Und nur dafür 100ten von Benutzern ein neues JRE aufzuzwingen muss ja nicht unbedingt sein. Und ich denke man kann schon sagen, dass JRE 1.5 heute Standard ist, oder?

Es geht um folgenden Quelltext:
Java:
        javax.swing.GroupLayout pnlRechtsLayout = new javax.swing.GroupLayout(pnlRechts);
        pnlRechts.setLayout(pnlRechtsLayout);
        pnlRechtsLayout.setHorizontalGroup(
            pnlRechtsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlRechtsLayout.createSequentialGroup()
                .addContainerGap(152, Short.MAX_VALUE)
                .addComponent(lblLang, javax.swing.GroupLayout.PREFERRED_SIZE, 68, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(cmbLang, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlRechtsLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblStatus, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE)
                .addContainerGap())
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlRechtsLayout.createSequentialGroup()
                .addComponent(chbShowAll, javax.swing.GroupLayout.DEFAULT_SIZE, 211, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(btnExit))
            .addComponent(sclText, javax.swing.GroupLayout.DEFAULT_SIZE, 290, Short.MAX_VALUE)
        );
        pnlRechtsLayout.setVerticalGroup(
            pnlRechtsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlRechtsLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlRechtsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cmbLang, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblLang))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(lblStatus)
                .addGap(18, 18, 18)
                .addComponent(sclText, javax.swing.GroupLayout.DEFAULT_SIZE, 391, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(pnlRechtsLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnExit)
                    .addComponent(chbShowAll)))
        );
        
        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlLinks, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addComponent(pnlRechts, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(pnlRechts, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pnlLinks, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
		
		
	}

Hier wird mir an allen Stellen javax.swing.GroupLayout als Fehler gekennzeichnet. Meldung ist, dass der Pfad nicht aufgelöst werden kann. Es scheint diese Klassen also im JRE 1.5 noch nicht zu geben. Meine Frage wäre nun wie ich möglichst einfach ein äquivalent mit den gängigen 1.5-Layouts schaffen kann.

Das Hauptproblem ist eigentlich die sich ändernde Fenstergröße. Einige Elemente sollen dabei größer werden und andere dürfen es nicht, bzw dürfen es nur in eine Richtung.

Ich hoffe hier kann mir jemand helfen!
 
Also entweder ich habe was falsch verstanden oder das löst mein Problem nicht!

Ich hab das .jar in mein Eclipse-Projekt eingebunden. In dem Paket gibts ja auch ein Klasse namens GroupLayout. Allerdings ist diese nicht mit der javax.swing.GroupLayout identisch (GroupLayout.Alignment.LEADING existiert nicht)! Außerdem musste ich feststellen, dass ich auchnoch die Klasse javax.swing.LayoutStyle benötige. Auch die ist in dem Paket enthalten.

Wär ja auch zu einfach gewesen :(

Kann ich nicht einfach die nötigen Klassen aus dem 1.6er JDK nehmen und in mein Projekt einbinden? Geht sowas? Dazu bräuchte ich aber wahrscheinlich die Sources da ich die ja auf 1.5 compilen muss, oder?

Achja und ich habe von NetBeans die Datei swing-layout-1.0.3.jar genutzt. Scheint mir die neuste...
 
Hallo,

so wie ich das sehe ist das alles in dem jar so drinnen, nur eben in anderen packages.
javax.swing.LayoutStyle -> org.jdesktop.layout.LayoutStyle
avax.swing.GroupLayout.Alignment.LEADING->org.jdesktop.layout.GroupLayout.LEADING
Gruß Tom
 
Größtenteils ja, aber das LEADING vom Grouplayout z.B. fehlt in dem Paket!
Kannst du gerne testen ;)

Ich weiß auch nicht wie ich das machen soll.... Habe gerade schon mein NetBeans auf JDK 1.5 umgestellt und gehofft das er dadurch bei dem Projekt die Sachen ändert die nicht gehen - aber falsch gedacht. Muss nochmal ein wenig rumtesten!

Ich weiß auch nicht ob der Builer von NetBeans das berücksichtigt wenn man ne Oberfläche zusammenbastelt - aber eigentlich muss er das ja?!
 
Hallo,

nein es fehlt nicht, es sieht nur anders aus. In Java 6 ist LEADING ein Wert des Enums Alignment in der Klasse GroupLayout. In dem swing-layout.jar ist es ein static final int am GroupLayout mit dem Wert 1. Der ordinal() Wert von LEADING in GroupLayout ist auch 1. Die Codeänderung um den mit Java 6 erstellten Code auf das swing-layout umzustellen sollten ziemlich generisch sein.

. Habe gerade schon mein NetBeans auf JDK 1.5 umgestellt und gehofft das er dadurch bei dem Projekt die Sachen ändert die nicht gehen
Du kannst im Netbeans Designer einstellen, das er das GroupLayout aus swing-layout anstatt dem Java 6 GroupLayout verwenden soll
http://wiki.netbeans.org/FaqFormSwingLayoutLibrary
Note: Since Java 6 all the layout features are part of standard JDK. So you only need the Swing Layout Extensions library if you want your application running on Java 5. NetBeans 5.5 (not 5.0) allows you to choose whether to use the library or standard Java 6 code. (The root node of an opened form in Inspector has a property called Layout Generation Style.)

Gruß Tom
 
Also du hast recht!

Ich habe mein Projekt in NetBeans kopiert und angefangen die Form mit Java 5 ungefähr so nachzubauen. Dann habe ich nach ein paar Elementen nachgeschaut was nun im Quelltext steht und siehe da - er verwendet dieses Paket von NetBeans!

Nur wo genau finde ich diese Einstellung das er nicht die Java 6 Komponenten zum designen nehmen soll, sondern die von NetBeans? Irgendwie finde ich das nicht... Und: Kann man damit auch bestehende Frames umkonvertieren?

Würde mir sehr helfen ;)

lg und danke schonmal soweit!

EDIT:
Hier eine Anleitung wie man Einstellt welche Lib man für die Erstellung von Frames mit dem GUI Builder nutzen möchte (NetBeans 6.0):
Tools -> Options -> Advanced Options (unten links)

Dort unter:
Options -> Editing -> Gui Builder

In der Region Expert müsst ihr den Wert Layout Generation Style von Automatic auf Standard Java 6 Code oder Swing Layout Extensions Library ändern!

Wie man aber ein in Standard Java 6 Code erstellten Frame auf das Swing Layout Extensions Library konvertieren kann weiß ich nicht!

EDIT 2:
Also ich habe nun die Oberfläche nochmal genauso gezeichnet wie sie vorher war - ätzende Prozedur aber ich habe keinen anderen Weg gefunden. Dann musste ich noch in mein Eclipse-Projekt (Mit NetBeans habe ich nur die Oberfläche gemacht) diese swing-layout-1.0.3.jar (wie oben beschrieben) einbinden und schon läuft mein Programm auch auf JRE 1.5!

Ich finde nur das es sich beim Verändern der Fenstergröße etwas anders verhält... aber ka ;)
 
Zuletzt bearbeitet:
Zurück