kjey Skrevet 15. april 2005 Del Skrevet 15. april 2005 Hei, Har nettop startet opp med java. Var inne på sun sine sider på Java toturials for å lære meg å bruke JFrame. Spørsmålet mitt da er hvordan jeg kan fortsette i programmet mitt?! Hvis jeg f.eks vil legge til en JButton som skal utføre en liten oppgave, hvordan skal jeg da skrve dette inn i min lille kodesnutt? import javax.swing.*; import java.awt.*; import java.awt.event.*; class wcp { private static void GUI() { /* En fin rute */ JFrame.setDefaultLookAndFeelDecorated(true); /* Lager vinduet */ JFrame frame = new JFrame("WCP"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /* Legger til "Dette skal bli et bra program!" Label */ JLabel label = new JLabel("Dette skal bli et bra program!"); frame.getContentPane().add(label); /* Viser vinduet */ frame.pack(); frame.setVisible(true); } public static void main(String[] args) { javax.swing.SwingUtilities.invokeLater(new Runnable() { public void run() { GUI(); } } ); } } På forhånd takk! Lenke til kommentar
boemane Skrevet 15. april 2005 Del Skrevet 15. april 2005 Hei, Har nettop startet opp med java. Var inne på sun sine sider på Java toturials for å lære meg å bruke JFrame. Spørsmålet mitt da er hvordan jeg kan fortsette i programmet mitt?! Hvis jeg f.eks vil legge til en JButton som skal utføre en liten oppgave, hvordan skal jeg da skrve dette inn i min lille kodesnutt? På forhånd takk! Jeg har vanligvis en litt annen struktur på mine Swing applikasjoner. Jeg har laget en liten Swing applikasjon, og lagt den inn i Devsiden Paste for å få fargelegging av koden (litt lettere å lese). URLen til pasten er: http://www.devsiden.info/index.jsp?side=pastebin&pasteid=5 Håper det hjelper llitt Når du klikker på knappen sendes en ActionEvent til klassen som er registrert som ActionListener på knappen, i dette tilfelle samme klasse (this). Hvis du vil kan du skrive egne klasser som mottar ActionEvents og behandler dem. .:BoeManE:. Lenke til kommentar
mikaelandre Skrevet 15. april 2005 Del Skrevet 15. april 2005 den andre koden var mye bedre. Det er ikke nødvendig å ha med et runnable objekt i main metoden som du hadde først, er heller ikke noe poeng i å gjøre alt statisk. Det jeg pleier å gjøre er å lage en klasse som extends JPanel. Så oppretter jeg ei JFrame i mainmetoden, og legger panel objektet mitt til på den Lenke til kommentar
kjey Skrevet 15. april 2005 Forfatter Del Skrevet 15. april 2005 (endret) Takk for gode svar! Men hva vil det si å bruke "extends" og "implements"? Og hva er egentlig forskjell på public og private? Kanskje noen kan nevne noen sammenhenger? Endret 15. april 2005 av kjey Lenke til kommentar
boemane Skrevet 15. april 2005 Del Skrevet 15. april 2005 Takk for gode svar! Men hva vil det si å bruke "extends" og "implements"? Og hva er egentlig forskjell på public og private? Når en metode, klasse eller variabel er public er den tilgjengelig utenfor klassen de er definert i, men private betyr at det kun er klassen de er definert i som kan se variablene/metodene. at en klasse "extender" fra en annen betyr at den arver fra den. I dette tilfelle arver vi fra JFrame, slik at denne klassen (this) har alle egenskapene til en JFrame, pluss de vi definerer selv implements betyr at den benytter seg av et interface, og må dermed inkludere visse metoder. Lurt å gjøre hvis man skal lage standard komponenter, f.eks. korte svar, men håper det hjelper litt Lenke til kommentar
buskmann Skrevet 15. april 2005 Del Skrevet 15. april 2005 Hei, Har nettop startet opp med java. Var inne på sun sine sider på Java toturials for å lære meg å bruke JFrame. Spørsmålet mitt da er hvordan jeg kan fortsette i programmet mitt?! Du bør/må bruke en layoutmanager. Les videre i tutorialen. GUI (syns jeg) er noe av det vanskeligste innen Java. Lenke til kommentar
mikaelandre Skrevet 16. april 2005 Del Skrevet 16. april 2005 (endret) Extends: Dette bruker du når du vil ha et objekt som er subklasse av et annet objekt, men samtidig vil ha mulighet til å bruke superobjektets (det objektet du arver fra) metoder og variabler. "super"objektet kan settes til avstract dersom du vil nekte brukeren å opprette objekt av den typen. På denne måten kan du som i dette tilfelle extende JFrame. Deretter kan du velge å bruke alle metodene som allerede finnes i standard JFrame, eller du kan gjøre det som kalles å "overlagre" metodene. Da lager du en metode med samme navn som finnes i superklassen, men med annen funksjonalitet. Hvis du bare vil legge til litt ekstra funksjonalitet i en metode kan du inne i metoden kalle på super(); dette gjør at den orginale metoden også blir kjørt. Typisk bruksområde er om du lager en klasse som heter Person, og oppretter personer. Da kan du også opprette Student, som har alle egenskapene til en person, men som også har et par ekstra variabler. Implements: Dette er å implementere et grensesnitt, eller interface. Et slikt grensesnitt består kun av metodenavn, og du tvinges til å opprette de metodene, med identiske parametre og retur typer, mens du står fritt til å skrive innholdet i metodene. Forskjellen fra den forrige er da at du ikke har et felle sett med metoder, men alt må skrives i klassen hvor det brukes. Dette brukes typisk hvis du lager et spill og vil ha en datastyrt spiller og en menneskestyrt. Da lager du et grensesnitt kalt Spiller, og programmet trenger ikke å vite om spilleren styres av deg eller datan, siden metodene har samme navn og gir samme retur, forskjellen ligger i hvordan de forskjellige klassene har implementert metodene. Felles: Med begge kan du legge til så mye du vil av egen funksjonalitet som ekstra metoder og variabler i den klassen som arver eller implementerer. Det er heller ikke noe poeng i å lage hverken superklasse eller grensesnitt om du kun har en klasse som skal arve/implementere. Så til han som skreiv om LayoutManager: Du bruker en LayoutManager uansett, enten du setter den selv eller ikke. JFrame har som default FlowLayout, noe som ofte kan være greit, siden du like vel vil legge på et JPanel. Men panelet har også FlowLayout som default, og dette er ikke like kjekt. Da burker du metoden setLayout() eller du kan sende den som et parameter i konstruktor. Dette ble visst ganske lang, men jeg synes jeg lærer en del av å tenke igjennom ting som jeg egentlig bare gjør, så det er bare å spørre om du lurer på noe mer Endret 16. april 2005 av mikaelandre Lenke til kommentar
buskmann Skrevet 17. april 2005 Del Skrevet 17. april 2005 (endret) Så til han som skreiv om LayoutManager:Du bruker en LayoutManager uansett Nei, ikke hvis du bruker absolutt posisjonering. Endret 17. april 2005 av buskmann Lenke til kommentar
mikaelandre Skrevet 17. april 2005 Del Skrevet 17. april 2005 ok, trodde new JFrame(); automatisk satte LayoutManager til FlowLayout, og at du eksplisitt måtte gi beskjed om du ville ha absolutt posisjonering, men da tok jeg nok feil Lenke til kommentar
buskmann Skrevet 17. april 2005 Del Skrevet 17. april 2005 Du må gi eksplisitt beksjed om absolutt posisjonering ja, så der har du rett. Default for rootpane er borderlayout, mens default for jpanel er flowlayout. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå