Toon posts:

[JAVA] Design van een gui met layoutmanagers

Pagina: 1
Acties:

Verwijderd

Topicstarter
Al enige tijd probeer ik een GUI te designen en het gaat mij slecht af. Ik heb al enige tijd ervaring met java, maar met GUI's ben ik nooit erg intensief bezig geweest op wat simpele layoutmanagers na. Ongeveer 2 maanden terug wilde ik een applicatie gaan maken, maar ik liep al snel stuk op de layoutmanager gridbaglayout. Nog nooit zoeen gedrocht gezien. Op zich snap ik het principe en ook nog een klein beetje hoe het werkt. Echter vreemd genoeg wat ik ook typte, er komt altijd wat anders uit dan dat ik dacht dat ik uberhaupt typte. Ongeveer zoals dit filmpje

Nu ben ik verder wezen zoeken op dit forum en kwam uit op de FormLayout library van JGoodies.

De volgende gui had ik in gedachte:
Afbeeldingslocatie: http://img261.imageshack.us/img261/2409/designvb2.jpg

En dit is tot hoever ik tot op heden gekomen ben
Afbeeldingslocatie: http://img117.imageshack.us/img117/2793/screenshotkn1.jpg

En hieronder het relevant stukje code:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        CellConstraints cc = new CellConstraints();

        setLayout(new FormLayout(
                new ColumnSpec[]{
                        new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW),
                        FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                        new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW),
                        FormFactory.LABEL_COMPONENT_GAP_COLSPEC,
                        new ColumnSpec(ColumnSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW)
                },
                new RowSpec[]{
                        new RowSpec(RowSpec.FILL, Sizes.DEFAULT, FormSpec.DEFAULT_GROW),
                        FormFactory.LINE_GAP_ROWSPEC,
                        FormFactory.DEFAULT_ROWSPEC
                }));


        _leftPane.setViewportView(_leftMenu);

        this.add(_leftPane, cc.xy(1, 1));
        this.add(_centerPane, cc.xy(3, 1));
        this.add(_rightPane, cc.xy(5, 1));
        this.add(_jStatusBar, cc.xyw(1, 3, 5));


Hetzelfde scherm had ik eigelijk ook al bereikt met de GridBagLayout, die inmiddels weer verwijderd is van mijn HD. Ik weet dat coderequests hier uit de boze zijn, maar wie kan mij het juiste schopje in de goede richting geven?

Concreet zijn mijn vragen dus:
1. Hoe zorg ik voor een verhouding van 25%, 50%, 25% als ik 3 panels naast elkaar gooi. Nu zijn de panels nog fixed.
2. Een GAP creeer bij de linker en rechter panel ten opzichte van de bovenste panel (dus dat die gelijk staat met de tablijn)
3. Hoe creeert de meer dan gemiddelde java-programmeur doorgaans zijn gui die net even wat moeilijker is dan een simpele dialogbox. 3rd party libraries, tools? Of gewoon de standaard aanwezige library's in java?

Ik neig er bijna naar om naar de null-layout te grijpen. Over die laatste vraag. Ik heb al geprobeerd met de idea formdesigner te werken, maar het gebruik van xml files om de gui te renderen staat me tegen.

Matisse van netbeans vind ik ook niets omdat je dan sommige gegenereerde stukken van de code niet meer mag editen. De gridbaglayout dacht ik in haar totaliteit te snappen, maar steeds wanneer ik weer wat gecode had, kwam er totaal want anders uit dan ik dacht te schrijven. (gebrek aan grafisch inzicht? Ik kom er gewoon niet uit terwijl ik weet wat de verschillende attributen inhouden). Ook de plug-in van jgoodies met de formdesigner gebruik ik liever niet omdat je dan ook weer met gegenereerde stukken code werkt.

[ Voor 16% gewijzigd door Verwijderd op 17-05-2007 18:38 . Reden: onsamenhangend verhaal :P ]


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 27-11 16:36
GridbagLayout gebruiken...

1: Met weights over de horzontale as 1, 2, 1.
2: Zie : http://java.sun.com/j2se/...agConstraints.html#insets
3: Inderdaad een GUI library als JGoodies. Vaak zul je in een applicatie veel dezelfde schermen moeten maken. Het kan dan zinnig zijn om de gemene deler van die schermen herbruikbaar te maken zodat je sneller algemene settings kan bijwerken. Of een goede UI modeller gebruiken. Dat kan ook erg fijn zijn. Sowieso is het met Swing niet echt de bedoeling dat wat betreft de gegevens in je UI veel "tussen" de UI code doet.

Verwijderd

Topicstarter
Bedankt voor je antwoord. Ik ga de gridbaglayout nogmaals een kans geven en er weer mee spelen, ondanks dat ik het idee heb dat het weer een avond vullen wordt. Die insets is inderdaad de oplossing (had ik vreemd genoeg al eens eerder gezien, stom dat ik er niet op kwam).
Sowieso is het met Swing niet echt de bedoeling dat wat betreft de gegevens in je UI veel "tussen" de UI code doet.
Je bedoeld hiermee het MVC pattern? Ik heb onlangs een boek over patterns gelezen en ben ook zeker van plan het geleerde zoveel mogelijk in de praktijk te brengen

  • sig69
  • Registratie: Mei 2002
  • Laatst online: 01:51
Ik zou de GrtidBagLayout toch n og een kans geven. Het heeft mij ook wel wat tijd en experimenteren gekost maar uiteindelijk gebruik ik eigenlijk niet veel anders meer.

Roomba E5 te koop


Verwijderd

JGoodies Forms Layout met z'n panelbuilders doet het voor mij... GridBagLayout is slecht by design imho, je moet naar mijn mening teveel workarounds gebruiken om een beetje simpele layout te bekomen.

Deze kan je up to speed brengen: http://www.java2s.com/Cod...theDefaultFormBuilder.htm

Antwoord op je eerste probleem 25-50-25, de rest kan je wel verder uitzoeken neem ik aan...
Ik zou verder ook eens kijken naar de Binding en Validation frameworks van JGoodies, en de bijhorende design patterns ModelViewPresenter en PresentationModel.

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import javax.swing.JFrame;

import com.jgoodies.forms.builder.PanelBuilder;
import com.jgoodies.forms.debug.FormDebugPanel;
import com.jgoodies.forms.layout.FormLayout;

public class FormsDemo extends JFrame {


    public FormsDemo() {
        super("GOT Forms demo");
        PanelBuilder builder = new PanelBuilder(new FormLayout("f:d:g(0.25),f:d:g(0.5),f:d:g(0.25)","f:d:g"),new FormDebugPanel());
        
        builder.add(new JButton("links"));
        builder.nextColumn();
        builder.add(new JButton("midden"));
        builder.nextColumn();
        builder.add(new JButton("rechts"));
        
        setContentPane(builder.getPanel());
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    public static void main(String[] inArgs) {
        new FormsDemo().setVisible(true);
    }
}

[ Voor 53% gewijzigd door Verwijderd op 18-05-2007 11:08 . Reden: Forms colspec oplossing toegevoegd ]


Verwijderd

Topicstarter
De gridbaglayout heb ik nu eindelijk door. Het scherm wat ik voor ogen had is nu gelukt met de gridbaglayout. De code van jgoodies ziet er toch een stuk netter uit dan een gigantische constructor of een hele rij static variabelen toewijzen. Nu heb ik eindelijk het beoogde scherm wel, maar ik denk toch weer over te stappen naar jgoodies.
Ik zou verder ook eens kijken naar de Binding en Validation frameworks van JGoodies, en de bijhorende design patterns ModelViewPresenter en PresentationModel.
Ik zal er eens naar kijken. In ieder geval ben ik voorlopig zoet en zal het komende tijd wel nachtbraken worden. Goede site trouwens met leuke voorbeelden

[ Voor 5% gewijzigd door Verwijderd op 19-05-2007 04:15 ]


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

GridBagLayout is erg krachtig, als je weet hoe je ermee moet omgaan (het is bijna het bij elkaar hacken van je GUI).

Kijk naast JGoodies ook eens naar het Spring Rich Client project. Het is nog in een vroeg stadium van ontwikkeling.. maar je kan er nu al wel gemakkelijk applicaties mee bouwen. Bekijk de examples ook eens, om te zien op welke manier je een goede applicatie structuur kan verkrijgen.

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 24-11 23:24

BikkelZ

CMD+Z

Gridbaglayouts daar bijt iedereen eerst zijn tanden op stuk. Ik vond het de grootste bitch voor GUI's die ik ooit ben tegen gekomen.

iOS developer


Verwijderd

ik gebruik altijd gewoon NetBeans 5.5 werkt prima

Verwijderd

-FoX- schreef op zaterdag 19 mei 2007 @ 11:15:
Kijk naast JGoodies ook eens naar het Spring Rich Client project. Het is nog in een vroeg stadium van ontwikkeling.. maar je kan er nu al wel gemakkelijk applicaties mee bouwen. Bekijk de examples ook eens, om te zien op welke manier je een goede applicatie structuur kan verkrijgen.
Heb jij er al iets zinnigs mee kunnen maken dan? De demo's die ik over enkele maanden uitprobeerde gaven niet echt een stabiele indruk. Ik overweeg om SpringRCP te gaan promoten in een presentatie over Java Rich Client development, enkel uiteraard als je er effectief mee naar een klant toe kan gaan.

Verwijderd

Verwijderd schreef op zaterdag 19 mei 2007 @ 14:08:
ik gebruik altijd gewoon NetBeans 5.5 werkt prima
De drag & drop attitude heb ik maar al te vaak bij beginnende Java devers zien leiden tot Visual Basic-style slecht (zeg maar geen) design, autonomous views, unresponsive UIs, onleesbare code, ...

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Verwijderd schreef op zaterdag 19 mei 2007 @ 15:50:
[...]
Heb jij er al iets zinnigs mee kunnen maken dan? De demo's die ik over enkele maanden uitprobeerde gaven niet echt een stabiele indruk. Ik overweeg om SpringRCP te gaan promoten in een presentatie over Java Rich Client development, enkel uiteraard als je er effectief mee naar een klant toe kan gaan.
Iets wel, maar of dat echt zinnig was :) Het was meer om even te testen, en het gaf me wel een redelijk stabiele indruk. Feit is dat het Spring RCP project al bij veel klanten gebruikt wordt.. door de makers ervan welliswaar.. dus het is wel redelijk bruikbaar lijkt me.

Het probleem is nog steeds documentatie, en er zou wel wat meer actief op gewerkt mogen worden. Maarja, zolang ik niet zelf contribute, wie ben ik dan om daarover te zagen?
Pagina: 1