Forumdelen sponsras av

Trädvy Permalänk
Medlem
Plats
Gävle
Registrerad
Sep 2005

Java GUI fråga

Jag har en uppgift där jag ska konstruera ett Java program som ska ha samma utseende som bilden som jag bifogade.
Jag har grundläggande kunskaper i Java men har väldigt dåliga kunskaper i att konstruera grafiska användargränsnitt. Vi har dock inga krav på oss att koda allt för hand utan får använda oss av hjälpmedel som WindowBuilder etc.

Mitt problem är dock att jag inte äns får ordning på grejjerna med WindowBuilder, allt hoppar omkring, hamnar över/under varandra samt "allignar" sig fel mm.

Hur konstruerar man smidigast ett sådant gränsnitt med en massa textfields och labels som ska presenteras skapligt snyggt.

Trädvy Permalänk
Medlem
Registrerad
Mar 2008

JavaFX kanske? Bygg allt det grafiska i Scene Builder 2.0 och sen skriver man Controller-klasser till sina .fxml-filer för att styra det som ska hända med en TextField osv.

http://www.oracle.com/technetwork/java/javafxscenebuilder-1x-...

Primär: | Ncase M1 | i7 6700K | Z170 | 16GB RAM | 1080Ti | 1.5TB SSD | SF600 |
Sekundär: | i5 3570K | Z77 | 8GB RAM | 250GB SSD | 25TB HDD | AX850 |
Bärbar: | MBA 13" | i5 4250U | 8GB RAM | 128GB SSD |

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003

Jag rekommenderar att du kikar på valfritt gui-objekt för en tabell. Jag är inte så påläst i modernare Java-guin men jag kan tänka mig att det borde finnas färdiga kontroller för att hantera input i tabeller.
Det är ju uppenbarligen tabulär data som ska matas in där. 2.1, 2.2, etc etc.

ηλί, ηλί, λαμά σαβαχθανί!?

Trädvy Permalänk
Medlem
Plats
Borås
Registrerad
Maj 2002

Skulle rekommendera javafx med scene builder, fast istället för scene buildern på oracles sida så ta och ladda ner den från:
http://gluonhq.com/products/scene-builder/

Sen för att göra den layouten du bifogade är nog det lättaste att använda en gridpane.

flippy @ Quakenet

Trädvy Permalänk
Medlem
Registrerad
Mar 2008
Skrivet av ante84:

Skulle rekommendera javafx med scene builder, fast istället för scene buildern på oracles sida så ta och ladda ner den från:
http://gluonhq.com/products/scene-builder/

Sen för att göra den layouten du bifogade är nog det lättaste att använda en gridpane.

Oj, visste inte ens att det fanns en nyare version av Scene Builder. Vad är det för skillnad på Gluons versioner jämfört med Oracles?

Primär: | Ncase M1 | i7 6700K | Z170 | 16GB RAM | 1080Ti | 1.5TB SSD | SF600 |
Sekundär: | i5 3570K | Z77 | 8GB RAM | 250GB SSD | 25TB HDD | AX850 |
Bärbar: | MBA 13" | i5 4250U | 8GB RAM | 128GB SSD |

Trädvy Permalänk
Medlem
Plats
Borås
Registrerad
Maj 2002
Skrivet av Afrasbaba:

Oj, visste inte ens att det fanns en nyare version av Scene Builder. Vad är det för skillnad på Gluons versioner jämfört med Oracles?

Oracles version släpps bara som källkod numera i och med Java 8 update 40 i början av 2015, som jag förstått det har gluon tagit över utvecklingen och släpper också färdiga binärer, så det är ingen större skillnad på dem.

flippy @ Quakenet

Trädvy Permalänk
Medlem
Plats
Gävle
Registrerad
Sep 2005

Jag har kommit en liten bit på vägen men lyckas inte tänka ut några saker.
Jag har just nu ett gränssnitt med en massa JTextFields, när jag klickar på en knapp så ska alla de ifyllda värdena skrivas till en fil men måste även ha en unik sträng innan själva värdet.

Så om jag har tio olika JTextFields och jag fyller i fält 4 och 7 så ska följande skrivas till filen:

#7201 ART <Värdet från JTextField 4>
#7209 ART <Värdet från JTextField 7>

Varje fält ska alltså ha ett id som jag måste skicka med när jag skriver till filen, värdet är alltid samma för de specifika fälten.

Det som jag inte kommer på hur jag ska lösa är först hur jag ska knyta ett specifikt id till varje JTextField som jag senare kan använda tillsammans med värdet som användaren skrev in.

Sedan hur jag "samlar" ihop värdena från alla JTextFields som ligger i en panel. Kan man loopa igenom alla JTextFields i en panel på något sätt för att kolla vilka som innehåller värden?

Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011

Om det är absolut nödvändigt att använda just Java kan du bortse från det här, men min bedömning är att resultatet skulle bli extremt mycket bättre om lösningen gjordes som en webbapplikation istället. Personligen hade jag valt Elm som språk, men det är förstås inget krav.

Bortsett från artificiella begränsningar (typ "Du ska använda Java, punkt!") tycker jag det är nästan omöjligt att motivera att inte göra detta som en webbapp.

5930K • Corsair DP 32 GiB • EVGA GTX 980 • 2x Swift PG278Q
Better SweClockersDisplayPort över USB-C

Köp processor för framtiden™, men inte grafikkort.

Trädvy Permalänk
Medlem
Plats
Gävle
Registrerad
Sep 2005

@Alling:
Tyvärr är det en del av en skol-uppgift och kravet är att java måste användas.

Trädvy Permalänk
Entusiast
Testpilot
Plats
Chalmers
Registrerad
Aug 2011
Skrivet av burton666:

Jag har kommit en liten bit på vägen men lyckas inte tänka ut några saker.
Jag har just nu ett gränssnitt med en massa JTextFields, när jag klickar på en knapp så ska alla de ifyllda värdena skrivas till en fil men måste även ha en unik sträng innan själva värdet.

Så om jag har tio olika JTextFields och jag fyller i fält 4 och 7 så ska följande skrivas till filen:

#7201 ART <Värdet från JTextField 4>
#7209 ART <Värdet från JTextField 7>

Varje fält ska alltså ha ett id som jag måste skicka med när jag skriver till filen, värdet är alltid samma för de specifika fälten.

Det som jag inte kommer på hur jag ska lösa är först hur jag ska knyta ett specifikt id till varje JTextField som jag senare kan använda tillsammans med värdet som användaren skrev in.

Sedan hur jag "samlar" ihop värdena från alla JTextFields som ligger i en panel. Kan man loopa igenom alla JTextFields i en panel på något sätt för att kolla vilka som innehåller värden?

Om du ska ha någon chans att lyckas, oavsett språk, är nog deklarativ kod ett måste för själva innehållet. Du behöver abstrahera bort det som är gemensamt för varje textfält så att du kan nedteckna dem deklarativt och utan repetition – någonting åt det här hållet (pseudokod):

FORM = [ FormGroup("Tillgångar", [ TextField("Koncessioner ..."), TextField("Förskott ..."), ]), FormGroup("Omsättningstillgångar", [ TextField("Råvaror och förnödenheter"), TextField("Varor under tillverkning"), TextField("Färdiga varor och handelsvaror"), TextField("Övriga lagertillgångar"), ]), // ... ];

Du vill inte ha någonting i den här stilen:

tillgangar = new FormGroup("Tillgångar"); textFieldKoncessioner = new TextField("Koncessioner ..."); addEventListener(textFieldKoncessioner, handler); tillgangar.add(textFieldKoncessioner); textFieldForskott = new TextField("Förskott ..."); addEventListener(textFieldForskott, handler); tillgangar.add(textFieldForskott); // ...

Det är helt ohållbart att skriva samma kod en gång för varje textfält; du behöver abstrahera så att du inte behöver "komma ihåg att göra ditten och datten för varje textfält", utan att allt som ska gälla för alla textfält automatiskt gäller för alla textfält.

5930K • Corsair DP 32 GiB • EVGA GTX 980 • 2x Swift PG278Q
Better SweClockersDisplayPort över USB-C

Köp processor för framtiden™, men inte grafikkort.