Avatar billede olhansen Nybegynder
26. februar 2003 - 21:46 Der er 10 kommentarer

Applet layout og events

Java applets er ret nyt for mig, så jeg har brug for lidt kickstart.
Jeg skal lave en applet der displayer en dynamisk liste af venstrestillede checkboxe, med en gif til hver checkbox.
Jeg skal kunne fange onClick events (eller hvad de nu hedder)
Jeg skal fra denne applet kommunikere med en anden applet.

Jeg har fået hul på kompilering mv. Jeg er begrænset til IE6.
Indtil nu har jeg startet således:

public class ListOpts extends Applet {

    public void init(){
    Checkbox b;
    setLayout(new GridLayout(4,1));
    add(new CheckBox("Øl");
    add(new CheckBox("Vin");
    add(new CheckBox("Whiskey");
    }

Disse checkboxe står ikke tæt nok (er jævnt fordelt over appletens HEIGHT.
Avatar billede =maddog= Nybegynder
27. februar 2003 - 06:14 #1
Måske du skulle læse lidt Java først....
I java fanger man ikke events på samme måde som i JavaScript. Et objekt der skal registrere input har en lytter (implementering af et barn af java.util.EventListener) tilknyttet. Denne kalder en metode når en given begivenhed finder sted. Hver lytter kan videresende disse Events via EventMultiCaster'en.
Det sidste arbejde er gjort for dig i alle GUI klasser der er designet til at tage input (og er ikke din hovedpine med mindre du vil lave letvægtskomponenter selv) så din første opgave er at knytte en lytter til dine Checkboxe. Til en CheckBox hører en ItemListener. Når din CheckBox ændrer status udfører denne lytter metoden itemStateChanged(ItemEvent ie).

Du bruger AWT klasserne, og det er rent kompatibilitets-mæssigt meget fint, men du får uhyre store problemer med at styre hvorledes de bliver tegnet. Dette skyldes at AWT klasserne er heavyweight (sværvægt) komponenter, men en nativ peer, der fuldstændigt bestemmer hvordan de skal tegnes.
Du har langt bedre kontrol over Swing klasserne (JApplet og JCheckBox).

Med hensyn til at få dem til at bytte rundt... Det er også rimelig svært. Java er ikke designet til sådan noget. Java er primært et applikations-sprog, og i modsætning til hjemmesider er det ikke vanen at ting hopper og danser rundt i programflader. Du skal med stor sikkerhed til at bruge et JPanel uden LayoutManager og sætte inserts og bounds i hånden.

Hvis dette her går direkte over hovedet på dig synes jeg du skulle tage en kande kaffe og gå igang med de tutorials der findes på java.sun.com.
Avatar billede =maddog= Nybegynder
27. februar 2003 - 06:16 #2
OK. Jeg skal også lige pege på GridBagLayout, der er min foretrukne LayoutManager hvis komponenter ikke skal bruge alt den plads de har til rådighed. I et GridLayout vil hver "celle" fylde hele pladsen.
Det er en rimelig styg fætter at sætte sig ind i, men er til gengæld den mest flexible 2d manager til rådighed (efter min mening).
Avatar billede viht Nybegynder
27. februar 2003 - 08:41 #3
Du kan nu også få komponenter til at opføre sig bedre i GridLayout, altså ikke fylde hele pladsen ud. Hvis du f.eks. kommer JPanels med FlowLayout på grids'ne.

Hvis du skal i gang med GridBagLayout og andre LayoutManagers, så læs evt. om layout managers på:
try {
  www.docjava.dk
}
catch( LinkNowAllowedException lnae ) {
  System.exit(42);
}
Det er meget bedre at komme rigtigt i gang fra start... du lider hjernedøden rimelig hurtigt hvis du kommer i gang med null layout! :)
Avatar billede viht Nybegynder
27. februar 2003 - 08:42 #4
I menuen vælger du Grafiske Brugergrænseflader -->
Avatar billede =maddog= Nybegynder
27. februar 2003 - 08:45 #5
... eller man kunne lave en layoutmanager selv. evt med den ønskede ombytnings funktionalitet
http://java.sun.com/docs/books/tutorial/uiswing/layout/custom.html
Avatar billede viht Nybegynder
27. februar 2003 - 08:51 #6
=maddog= >> Der er vi så ovre i noget af det riiiimelig langhårdede :)
Avatar billede olhansen Nybegynder
27. februar 2003 - 08:59 #7
Thanks you guys!

Jeg kigger lige lidt på java.sun.com og docjava.dk, og ser om jeg ikke kunne opnå at forstå det der layout halløj.
Jeg har måske formuleret mig lidt uklart, men checkboxene skal ikke bytte plads, blot kunne skjules og vises dynamisk.

Jeg kigger på det i weekenden

Tak!
Avatar billede olhansen Nybegynder
28. februar 2003 - 09:00 #8
Så fik jeg styr på den der GridBagLayout. Det er jo nogenlunde fint. Kan blot ikke få listen med checkboxe til at aligne til toppen. Problemet er at applet'en i HTML åbnes med en HEIGHT på f.eks 300. Hvis der kun er 4 checkbox skal de stå øverst - det er pænest. Har I nogen ideer til hvordan dette sikres? Jeg har prøvet en masse forskellige indstillinger på GridBagConstrains.


Mvh Ove
Avatar billede =maddog= Nybegynder
28. februar 2003 - 09:17 #9
har du prøvet at sætte anchor til NORTHWEST og lave det nederste celle meget stor med gridheight?
Avatar billede olhansen Nybegynder
28. februar 2003 - 10:14 #10
Ja nu er det forsøgt:

    public void init(){
    GridBagConstraints con;
    Checkbox b;

    GridBagLayout layout = new GridBagLayout();
    setLayout( layout );
 
    con=new GridBagConstraints();
    con.anchor=GridBagConstraints.NORTHWEST;
    con.gridy=1;
    b=new Checkbox("Øller");
    layout.setConstraints( b, con );
    add( b,con );

    con.gridy=2;
    b=new Checkbox("Vin");
    add( b,con );

    con.gridy=3;
    con.gridheight=5;
    b=new Checkbox("Whiskey");
    add( b,con );

    }

Hvis den sidste gridheight blir for stor ser jeg intet, og den giver en initialiseringsfejl i IE6.
Skal jeg pakke det hele ind i en frame med en anden type layout?
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester