17. januar 2007 - 18:16Der er
6 kommentarer og 1 løsning
Swing program arkitektur
Hej
Jeg har i de sidste 3 uger bygget et swing program. Fordi det er første gang, har jeg overvejende brugt statiske metoder og ikke udnyttet javas objektorienterede abstraktionsniveau. Nu sidder jeg i de sidste dage og skal reflektere over projektet og evt. skrive, hvordan jeg har gjort forkert og hvordan det ellers kunne have set ud. Det jeg egentlig søger er, hvordan man opbygger et GUI program, hvor man udnytter den objektorienterede del.
Hvis man nu tager udgangspunkt i det eksempel jeg sidder med så skal der bygges et vindue, der har en JMenu og et indhold nedenunder i form af et JPanel. Dette JPanel kan så variere når der fra brugerens sidder trykkes på et menu punkt.
Hvordan ville man rent arkitektonisk bygge et sådant program?
Det jeg bliver i tvivl om er hvordan events skal handles og hvordan hvert JPanel skal bygges.
Det helt basale maa jo vaere at du laver en klasse som extender JFrame og som har ikke statiske metoder og som evt. ogsaa bruger nogle andre af dine klasser der extender Jetellerandet.
Mere avanceret vat det vel oplagt med noget JList/JTable og komme ind paa noget MVC.
Overordnet ville jeg opbygge programmet i 3 lag. (grænseflade, funktionalitet og modellag)
Grænseflade Jeg ville nok kigge på hvilke ting der skal ligge fast hele tiden i winduet og implementere det i den klasse. Menu'er og panel'er som variere alt efter hvor man har klikket mm. ville jeg lave i enten selvstændige klasser, eller en super klasse med underklasser til hvad enten det skal vise.
Event ville jeg håndtere ved tilstandsskifte på de forskellige objekter. Det vil sige at en person har klikket på en ny type visning i programmet og den overordnede GUI klasse skifter tilstand fordi at den skal ændre sin menu.
Funktionalitet Yderligere går jeg ud fra at programmet har noget funktionalitet, dette ville jeg opdele alt efter hvormeget funktionalitet der er og om man kan lave noget former for grupperinger. (dette er for at en ny progammør hurtigt vil kunne sætte sig ind i programmet)
Model model laget skal indeholde de data som der arbejdes med i programmet. eks. er det en poker applikation skal der være en kort-klasse, bord, hånd mm.
Et program har altid nogle krav som det skal leve op til, evt. stabilitet, hastighed, sikkerhed mm. Der mener jeg også at du skal vurdere om din arkitektur lever op til de krav der er sat.
Er ikke sikker på om det hjælper dig, men det var mine umiddelbare tanker!
altså ... menuen i programmet ændrer sig aldrig. Det er en JMenu der altid er synlig og har de samme elementer som endten er synlige/ikke synlige eller aktiveret/deaktiveret.
Så jeg tænkte på at opbygge det sådan her: MainFrame (extender JFrame) har (dvs. som objekt felt) -et panel med et bestemt layout -en menu (en klasse der extender JMenuBar, som jeg laver) -et currentPanel JPanel (sættes når indholdet skal skiftes)
dvs. der i constructoren for MainFrame står { this.menu = new Menu(); }
og der i constructoren for Menu står { //f.eks. this.menuHead = new JMenu("Menu1"); this.menuPunkt1 = new JMenuItem("punkt1"); this.menuPunkt2 = new JMenuItem("punkt2"); this.menuPunkt3 = new JMenuItem("punkt3"); this.menuHead.add(menuPunkt1); this.menuHead.add(menuPunkt2); this.menuHead.add(menuPunkt3); }
Men hvordan skal jeg så håndtere de events der kommer når brugeren trykker på menu punkterne. Indtil videre har jeg bare oprettet en actionlistener på hvert objekt og lavet en ny underklasse for hver listener. Men er det smart? Kan man ikke lave noget med, at der er én klasse Eventet bliver smidt videre til? Og hvilket af de nævnte objekter skal "have" denne controller...
emnet er for mig stadig uafklaret, men i sidste ende tror jeg at når der skal håndteres events med gui, vil det ret hurtigt blive rodet lige meget hvad man gør. jime boy smid et svar, så får du das points
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.