wiki:WindowBuilder
Last modified 3 years ago Last modified on 2015-02-14 11:47:24

WindowBuilder

Näillä sivuilla kerrotaan tarkemmin WindowBuilderin käytöstä Eclipsen kanssa Ohjelmointi 2 -kurssilla. Omaa konetta varten asennusohjeet täältä.

Käyttö

  • Vaihda aluksi koodin tuottaminen niin, että tehdään nimettyjä kenttiä ja alustetaan ne saman tien:
    • Window/Preferences/WindowBuilder/Swing/Code generation
    • valitse Init. Field
    • Window/Preferences/WindowBuilder/Swing/LookAndFeel ja ruksi kohtaan Apply chosen LookAndFeel in main() method
  • Uuden WindowBuilder-projektin aloitus:
    • Luo ensin normaalisti uusi Java-projekti
    • Sitten New/Other.../Window Builder/Swing Designer/JFrame
    • Mikroluokissa ensimmäistä kertaa design-tilaan siirryttäessä WindowBuilder saattaa heittää virheilmoituksen, mutta voit ohittaa sen painamalla reparse
    • Voit design-tilassa lisätä ikkunaan komponentteja työkalupalkin avulla
    • Aluksi voi olla helpointa vaihtaa Framen contentPanen layoutiksi AbsoluteLayout. Myöhemmin käyttöliittymä on syytä tehdä kuitenkin niin, että ikkunan koon muuttaminen muuttaa mielekkäästi komponenttien kokoja. Tämä vaatii silloin muiden layouttien (useimmiten BoxLayout, BorderLayout ja FlowLayout) käyttöä.
  • Kuvan lisääminen ohjelmaan
    • Swingissä ei ole kuville erillistä komponenttia, vaan niitä käytetään muiden komponenttien kanssa. Tällöin voit luoda helposti esimerkiksi kustomoidun napin.
    • WindowBuilder antaa mahdollisuuden käyttää kuvaa suoraan koneelta (absolute path), mutta oikea tapa ohjelman siirrettävyyden kannalta on siirtää se projektiisi jonkun paketin sisälle.
    • Kätevin tapa siirtää kuva projektiisi on vetää ja pudottaa se resurssienhallinnasta suoraan pakettiin. Huom! Mikäli käytät default packagea, ei WindowBuilder löydä kuvaa. Tällöin luo kuvalle oma paketti (esimerkiksi kuvat).
    • Jos haluat kuvan ilman toiminnallisuutta, voit käyttää esimerkiksi JLabelia, ja säätää properties-ikkunasta icon-propertya. Valitse Classpath-resource, navigoi kuvaasi ja paina ok.

Linkkejä

Vinkkejä

  • Vaihda aina välillä Design ja Source näkymien välillä ja opettele millaista koodia syntyy.
  • En saa design viewiä näkyviin
    • paina oikeaa hiiren näppäintä tekstieditori-ikkunan päällä => Open With => Windowbuilder Editor
  • Välilyönnin painaminen design tilassa komponentti aktiivisena päästää nopeasti muokkaamaan sen text propertya.
  • Esc painaminen design tilassa siirtää fokuksen komponentin "isä-komponenttiin"
  • JList ja JTable kannattaa laittaa ScrollPanen päälle, jolloin niitä voi rullata. Itse asiassa muuten ei tule edes otsikkoriviä JTableen.
    • Tosin StringTable ja ListChooser yms. (ks. GUI.jar) hoitavat nuo kaikki automaattisesti.
  • Haluan että käyttäjä voi vaihtaa kahden alueen kokoa suhteessa toisiinsa
    • lisää ensin haluamaasi kohtaan pohjaksi JSplitPane
    • tähän ilmestyy kaksi "nappulaa"
    • raahaa kummankin nappulan päälle yksi paneeli ja sitten laita näiden paneelien päälle mitä tarvitset
  • Entä jos haluan jakaa alueen kolmeen osaan, joiden kokoa käyttäjä voi muuttaa?
    • laita ensin yksi JSplitPane jonka vasemmalle puolelle laitat JPanelin ja oikealla puolella toisen JSplitPanen ja siihen kaksi JPanelia.
  • En antanut komponentteja pudotellessani niille kunnon nimiä. Miten korjaan?
    • Components (luettelo) ikkunassa valitse kaikki väärän nimiset (tai jopa kaikki) komponentit
    • paina hiiren oikeaa ja valitse Rename...
    • sinulle aukeaa ikkuna, jossa voi helposti kirjoittaa komponenteille uudet nimet
  • En saa ScrollPaneen laitettua haluamiani komponenttejä?
    • tuossa lienee joku vika WindowBuilderissä kun Components ikkunassa ei voi pudottaa ScrollPanen päälle.
    • Lisää ScrollPane halumaasi paikkaan.
    • Lisää esim. JList suunnitteluikkunassa ScrollPanen päällä ja nimenomaan sen ViewPort-kohtaan.
    • Jos edellinen ei millään onnistu, niin asiaa voi kiertää:
    • laita lomakkeelle ScrollPane siihen missä haluat sen oikeasti olevan
    • laita lomakkeella esim. Panel tai List johonkin (jatkossa nimi omaRullattavaAlue)
    • vaihda Source-näkymään
    • etsi missä on .add(omaRullattavaAlue), poista tämä rivi
    • etsi rivi jossa luodaan lisäämäsi ScrollPane
    • laita tuo rivi muotoon ... = new JScrollPane(omaRullattavaAlue);
  • Minulle tärkeä ominaisuus on aina piilossa ja joudun painamaan Properties-ikkunassa Show advanced properties -ikonia jatkuvasti
    • laita kerran tuo ominaisuus näkyville ja sitten valitse se hiiren oikealla ja valitse sieltä haluamasi Mark as...
  • Alue johon olen laittanut ScrollPanen haluaa aina kasvaa liian suureksi
    • ota ScrollPane-komponenttisi Advanced properties näkyviin ja vaihda siellä Prefereced Size kuten sen haluat olevan, tuo näyttää helposti hyppäävän isoksi eikä sitten enää pienene
  • Haluan lisätä monta samalaista komponenttia ja tuntuu hitaalta lisätä niitä yksi kerrallaan
    • pidä Ctrl-pohjassa ja lisää niin monta samaa komponenttia kuin haluat
    • sitten nimeä lisäämäsi komponentit kaikki kerralla kunnolla (ks aikaisempi vinkki).
  • Miten käytetään JRadioButtonia?
  • Miten käytetään JListiä?
  • Lopuksi vielä vinkkejä käyttöliittymän suunnitteluun, eli ei näin!
  • Jos esim JList-komponenttia lisätessä tulee valitus ettei osaa tulkita geneerisyyttä ja on syntynyt rivi tyyliin:
      private final JList<? extends E>list = new JList();
    
    niin muutta tuo rivi esimerkiksi muotoon:
      private final JList list = new JList();
    
  • kuvia ja taustakuvia ohjelmaan

Helposti tehtäviä virheitä

Modaalinen dialogi ei näy tai ei ole modaalinen

Jos tekee modaalisia dialogeja tyyliin:

KerhoGUI:

260         mntmTietoja.addActionListener((e) -> about());

...

379     protected void about() {
380         new TiedotDialog();
381     }

niin silloin tuolla TiedotDialogin muodostajan LOPUSSA (!!!) on oltava:

55      public TiedotDialog() {
...	
79          setVisible(true);
80      } 

WindowBuilderillä jos yrittää ruksia päälle sen Visible, niin se sijoittaa sen muodostajan alkuun ja silloin dialogi tulee ensin näkyväksi ja modaalisuusasetukset eivät ehdi vaikuttaa. Eli jos tuota riviä ei ole lainkaan TiedotDialog:in muodostajassa, se pitää lisätä sinen ja jos se on, se pitää käsin siirtää muodostajan loppuun.

Mikäli WindowBuilder ei löydy Eclipsestä mikroluokissa

Jos Eclipsestä käynnistää vanhan 3.6/3.7 version (Helios/Indigo), se voi sotkea asetuksia sen verran, että WindowBuilder-välilehti ei suoraan Eclipsestä enää löydy.

Tämän saa korjattua seuraavasti:

  • Mene hakemistoon U:\config.
  • Poista kansio eclipse_jee.

Huomioi, että tämä voi poistaa joitain käyttäjäkohtaisia asetuksia. Tämän jälkeen WindowBuilder pitäisi taas toimia Eclipsessä. Vanhojen Eclipsen versioiden käyttämistä tulisi välttää ja käyttää uusinta Luna (4.4)-versiota.