import javax.swing.*; import java.awt.*;

Like dokumenter
4. mars 2008 Grafisk brukergrensesnitt med Swing og awt Litt Modell Utsyn - Kontroll Del I. Stein Gjessing Inst for Informatikk Univ.

Om Grafiske Bruker-Grensesnitt (GUI) Hvordan gjør vi det: To måter. GUI (Graphical User Interface)-programmering

Om Grafiske Bruker-Grensesnitt (GUI) Hvordan gjør vi det: To måter. GUI (Graphical User Interface)-programmering. del 1. Litt Modell Utsyn - Kontroll

INF1010 Grafisk brukergrensesni3 med Swing og awt del 1 INF1010

INF1010 Grafisk brukergrensesni3 (GUI) med Swing/awt. del 1

Uke mars 2005 GUI - del 2. GUI (Graphical User Interface)-programmering

Inf 1010 GUI - del 2

GUI - del 2. Stein Gjessing Inst for Informatikk Univ. i Oslo

Grafisk Brukergrensesnitt

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. GUI - del 2

INF1010. Grafisk brukergrensesni. med Swing og awt del 2. INF Grafisk brukergrensesni4 II

Inf mars 2010 GUI del 2

6108 Programmering i Java. Leksjon 8. GUI: Grafisk brukergrensesnitt. Del 2: Roy M. Istad 2015

INF1010. Grafisk brukergrensesni. med Swing og awt del 2

Om Grafiske Bruker-Grensesnitt (GUI) Hvordan gjør vi det, to typer av vinduer? GUI (Graphical User Interface)-programmering

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf GUI - del 2

JPanel. Komponent hieraki. Window/JWindow. Applet/JApplet. JDialog. JFrame

Grafiske brukergrensesnitt med Swing og AWT

Hvordan gjør vi det, to typer av vinduer? Om Grafiske Bruker-Grensesnitt (GUI) GUI (Graphical User Interface)-programmering

Gjennomgang av eksamen H99

Kapittel 15: Grafiske brukergrensesnitt. Del II

INF1010 våren 2006 Uke 19: 9. mai 2006 Et større eksempel: Solitaire (kabal)

UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

INF Våren Li' repe$sjon om Tråder og GUI. Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo. Ins$tu' for informa$kk

UNIVERSITETET I OSLO

EKSAMEN. TILLATTE HJELPEMIDLER: Alle trykte og skrevne. INNFØRING MED PENN, evt. trykkblyant som gir gjennomslag

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

LO191D/LC191D Videregående programmering

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE

GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser. En oversikt over kapittel 19 i boka

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Kapittel 13: Grafiske brukergrensesnitt. Java som første programmeringsspråk

Kapittel 13: Grafiske brukergrensesnitt. Java som første programmeringsspråk

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne

Løsning på småoppgaver etter hvert underkapittel. kap

GUI («Graphical User Interface») del 2

Tittel Objektorientert systemutvikling 1. Eksamenstid, fra-til Ant. oppgaver 6

Løsning på småoppgaver etter hvert underkapittel, kapittel 13 18

UNIVERSITETET I OSLO

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

INF 1010, vår 2005 Løsningsforslag uke 10

ANTDAGER = 358; I Ifra nyttår 08 til 08 1ed julaften

UNIVERSITETET I OSLO

Vi lærte sist å lage vinduer. Om å lage et vindu. GUI (Graphical User Interface)-programmering. Inf GUI - del 2

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Eksamensoppgave Vår 2012 Ordinær eksamen Bokmål. Videregående programmering. Eksamensdato: Studium/klasse: 2. klasse

GUI («Graphical User Interface») del 2

Kapittel 15: Grafiske brukergrensesnitt. Del II

Løsningsforslag Videregående programmering, eksamen desember 2010

En klasse er noe - en metode gjør noe (! / # <= (! * +!! ",-' %. "- -/ %.!#) )! " 0'%! * *$! "1-)) '' % '. 22!'( 7/ /! * 2 2! "*"% 8"%% 9 - -!

1 t:n'v'\ekode LO325E. Alle ~vne og trykte. GOd'"j(jent kalkulator

Mål med kurset. Java i INF Dagens tema. GUI med Swing. Dokumentasjon

2 Om statiske variable/konstanter og statiske metoder.

Fra Python til Java, del 2

INF1010 våren 2008 Uke 4, 22. januar Arv og subklasser

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF 1010, vår 2005 Løsningsforslag uke 11

HØGSKOLEN I SØR-TRØNDELAG

INF1010. Grensesnittet Comparable<T>

Les gjennom hele oppgavesettet før du begynner å besvare deloppgavene.

INF1010, 21. februar Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010, 15. januar time. Parametriserte klasser (generiske klasser) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

LC191D/LO191D Videregående programmering mai 2010

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

IN1010 våren 2018 Tirsdag 15. mai. Repetisjon av subklasser og tråder. Stein Gjessing Institutt for informatikk Universitetet i Oslo

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

Forelesning inf Java 4

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

2 Om statiske variable/konstanter og statiske metoder.

UNIVERSITETET I OSLO

Blokker og metoder INF1000 (Uke 6) Metoder

Forkurs INF1010. Dag 2. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 14.

Stein Gjessing, Ins$tu' for informa$kk, Universitetet i Oslo

1. Krav til klasseparametre 2. Om å gå gjennom egne beholdere (iteratorer) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

Oblig 4Hybelhus litt mer tips enn i oppgaven

Velkommen til. INF våren 2016

INF våren 2017

Repitisjonskurs. Arv, Subklasser og Grensesnitt

UNIVERSITETET I OSLO

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

TOD063 Datastrukturer og algoritmer

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Fra Python til Java. En introduksjon til programmeringsspråkenes verden. Dag Langmyhr

klassen Vin må få en ny variabel Vin neste alle personvariable (personpekere) i listeklassen må byttes til Vin

INF1000 : Forelesning 4

Klasser, objekter, pekere og UML. INF gruppe 13

< T extends Comparable<T> > Indre klasser mm. «Det du bør ha hørt om før oblig 4»

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

Løsningsforslag Test 2

Forelesning inf Java 5

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I

Kapittel 15: Grafiske brukergrensesnitt: Enkel GUI. Del I

Forelesning inf Java 5

Kapittel 8: Programutvikling

Løsningsforslag for eksamensoppgave, våren 2004

Tråder Repetisjon. 9. og 13. mai Tråder

IN våren 2018 Tirsdag 16. januar

Transkript:

import javax.swing.*; import java.awt.*;

import javax.swing.*; import java.awt.*; Pluss mange Implementasjoner av forskjellige grensesnitt class RammeDemo { public static void main(string[] args) { JFrame ramme = new JFrame( Første vindu"); ramme.setdefaultcloseoperation(jframe.exit_on_close); ramme.setsize(300, 200); ramme.setvisible(true); Type: JFrame Type: JFrame Navn: ramme Navn: ramme Object-del Component-del Container-del Window-del Frame-del JFrame-del Objekt av klassen JFrame i minne på skjermen import javax.swing.*; import java.awt.*; class RammeDemo2 extends JFrame { RammeDemo2() { // En annen måte å sette tittel på rammen: super( Første vindu"); setdefaultcloseoperation(jframe.exit_on_close); setsize(300,200); setvisible(true); public static void main(string[] args) { new RammeDemo2(); Object-del Component-del Container-del Window-del Frame-del JFrame-del RammeDemo2-del Objekt av klassen RammeDemo2 i minne på skjermen setdefaultcloseoperation(jframe.exit_on_close); * Setter x i til å virke vanlig ContentPane (vindusflate) setvisible(true); Er nødvendig for at vinduet skal vise seg fram på skjermen (komponenter) Først lager vi vinduet med alle dens felter, trykkknapper,..osv, så viser vi det fram * Prøv uten og se hva som skjer Alle komponenten legges på vindusflaten

JButton: JButton knapp = new JButton("Trykk her ); En knapp som brukeren kan trykke på. Parameteren i konstruktøren angir teksten på knappen. JLabel: JLabel etikett = new JLabel("Skriv inn navn"); En etikett som kan inneholde enten tekst eller bilder. Brukes ofte som ledetekst til JText-Field. JTextField: JTextField tekstfelt = new JTextField(30); Et tekstfelt hvor brukeren kan skrive inn tekst. Metoden gettext() returnerer teksten i feltet. JTextArea: JTextArea tekstvindu = new JTextArea(10, 30); Et tekstvindu hvor programmet kan vise fram tekst. Metoden gettext() returnerer teksten i vinduet. JScrollPane: JScrollPane rullevindu = new JScrollPane(tekstvindu); Lager horisontale og vertikale rullefelt rundt et element. Brukes ofte i sammenheng med JTextArea som legges inn i rullevinduet. Parameteren er elementet vi ønsker lagt inn i rullevinduet. JPanel (som vi alt har sett) : JPanel panel = new JPanel(); Et panel som kan inneholde andre komponenter. // start og avslutning som før, dette er inne i konstruktøren // Først lages elementene: JButton knapp = new JButton("Trykk her"); JLabel etikett = new JLabel("Skriv inn navn"); JTextField tekstfelt = new JTextField(30); JTextArea tekstvindu = new JTextArea(10, 30); JScrollPane rullevindu = new JScrollPane(tekstvindu); // Lager et panel og legger elementene til dette. JPanel panel = new JPanel(); panel.add(knapp); panel.add(etikett); panel.add(tekstfelt); panel.add(rullevindu); // tekstvinduet er inne i rullevinduet Slik det blir når det kommer opp Etter å ha dradd i det (laget mindre bredde). Rullefeltet framkommer når vi fyller tekstfeltet //Får tak i peker til vindues lerret og legger panelet inn Container lerret = getcontentpane(); // er inne i et JFrame-obj. lerret.add(panel);

getcontentpane(); Container lerret = getcontentpane(); lerret.setlayout(new BorderLayout()); lerret.add(new JButton("NORD"), BorderLayout.NORTH); lerret.add(new JButton("SØR"), BorderLayout.SOUTH); lerret.add(new JButton("ØST"), BorderLayout.EAST); lerret.add(new JButton("VEST"), BorderLayout.WEST); lerret.add(new JButton("SENTER"),BorderLayout.CENTER); Container lerret = getcontentpane(); lerret.setlayout(new GridLayout(3, 2)); // 3 rader, 2 kolonner lerret.add(new JLabel("Fornavn")); lerret.add(new JLabel("Etternavn")); lerret.add(new JLabel("Telefon")); Vi legger inn radvis i tabellen. Å legge rett inn med new som her, virker ikke hvis vi vil ha input etterpå (fordi vi ikke har noen pekere til komponentene).

Container lerret = getcontentpane(); lerret.setlayout(new FlowLayout()); lerret.add(new JLabel("Fornavn")); lerret.add(new JLabel("Etternavn")); lerret.add(new JLabel("Telefon")); settitle("kombilayout"); // Lager komponentene JButton knapp = new JButton("Trykk her"); JLabel etikett = new JLabel("Skriv inn navn"); JTextField tekstfelt = new JTextField(30); etikett.setlabelfor(tekstfelt); JTextArea tekstvindu = new JTextArea(10, 30); JScrollPane rullevindu = new JScrollPane(tekstvindu); // Benytter GridLayout. JPanel tekstpanel = new JPanel(); tekstpanel.setlayout(new GridLayout(2, 1)); tekstpanel.add(etikett); tekstpanel.add(tekstfelt); // Legger panelet og resten av komponentene i JFrame-en Container lerret = getcontentpane(); lerret.add(tekstpanel, BorderLayout.NORTH); lerret.add(rullevindu, BorderLayout.CENTER); lerret.add(knapp, BorderLayout.WEST); Vi legger inn etter hverandre. JButton knapp; knapp= new JButton("Hei"); knapp Hei Dette objektet vil synes på skjermen (som en knapp) Vi skal lage det aller enkleste programmet vi kan tenke oss med én knapp som reagerer på at vi trykker på den ved å gi en utskrift i kommando-vinduet: getcontentpane().add(knapp); Legger knappen inn i vinduet C:\javaprog> javac Vindu.java C:\javaprog> java Vindu noen sa hei til meg noen sa hei til meg noen sa hei til meg knapp.addactionlistener(knappelyttter); I resten av disse foilene er NYTT: Sier fra hvem som skal lytte etter trykk på denne knappen (mer på neste side) en peker-variabel

knapp Hva skjer ved et knappetrykk? Dette objektet synes på skjermen (som en knapp) Hei knappelytter knapp.addactionlistener(knappelytter); forteller kjøresystemet at objektet som knappelytter peker på skal ha beskjed når noe skjer med knappen knapp. Objektet som knappelytter peker på blir satt opp som lytter ( actionlistener ) for knappen knapp. Kobling i kjøre-systemet Vindu ( ) objekt av den ferdiglagde klassen JButton Hei knapp knapp= new JButton("Hei"); getcontentpane().add(knapp); knappelytter = new Lytter( ); knapp.addactionlistener(knappelytter); getcontentpane() setvisible(); objekt av klassen Vindu (subklasse av JFrame) knappelytter Dette objektet lytter på knappen actionperformed( ) Når noen trykker på knappen, kaller kjøresystemet metoden actionperformed i det objektet som er satt opp som lytter for denne knappen. setsize(... ) objekt av klassen Lytter (implements actionlistener) actionperformed (... ) System.out.println("Noen sa hei til meg"); Klassedatastrukturen til class Vindu Fullstending mini-program med bare en knapp (og utskrift i DOS-vinduet) import java.awt.*; import java.awt.event.*; import javax.swing.*; main (...) Frame vindu = new Vindu(); vindu Vindu-objektet (konstruktøren) ordner så resten selv. objekt av klassen Vindu (se forrige side) public class Vindu extends JFrame { private JButton knapp; private Lytter knappelytter; public Vindu( ) { super("hei test"); Container samling = getcontentpane(); samling.setlayout(new FlowLayout()); setsize(300,200); knapp= new JButton("Hei"); samling. add(knapp); setdefaultcloseoperation(jframe.exit_on_close); setvisible(true); knappelytter = new Lytter( ); knapp.addactionlistener(knappelytter); // slutt Vindu konstruktør Metoden getcontenetpane() i JFrame returnerer bildeflaten til dette vinduet Her lager vi et lytterobjekt Her kobles knappen opp mot dette lytterobjektet

Program forts. public static void main(string[] args) { JFrame vindu = new Vindu(); //slutt main class Lytter implements ActionListener { public void actionperformed(actionevent e) { System.out.println("Noen sa hei til meg"); // slutt class Lytter // slutt class Vindu Kjøring (Windows) Dette er lytterklassen! C:\javaprog> javac Vindu.java C:\javaprog> java Vindu Noen sa hei til meg Noen sa hei til meg Noen sa hei til meg C:\javaprog> knapptrykket() int tall; datastrukt.oppdater(); tall= datastrukt.hentnyverdi(); vindu.skrivut(tall); datastrukt Objekt av class Kontroll int antall; Modell (int tall) { antall = tall; int hentnyverdi() { return antall; oppdater() { antall ++; Kontroll(){ datastrukt = new Modell(4); vindu = new Utsyn(this); vindu antall Objekt av class JButton "Øk" knapp kntrl Utsyn (Kontroll kontrl) super("tre deler eksempel 1"); kntrl = kontrl; tekst = new JLabel("Her kommer.. "); getcontentpane(). add(tekst); knapp= new JButton("Øk"); getcontentpane(). add(knapp); Objekt av class JLabel tekst knapp.addactionlistener(new KnappLytter); skrivut(int tall) { tekst.settext( Tallet er + tall); public class Kontroll { Modell datastrukt; Utsyn vindu; Kontroll(){ datastrukt = new Modell(4); vindu = new Utsyn(this); public static void main(string[] args) { new Kontroll(); //end main public void knapptrykket(){ int tall; datastrukt.oppdater(); tall= datastrukt.hentnyverdi(); vindu.skrivut(tall); // slutt Kontroll - main er minimal - Kontroll-konstruktøren lager de to andre objektene - actionperformed (neste side) kaller knapptrykket Objekt av class Modell Objekt av class Utsyn

class Utsyn extends JFrame { JButton knapp; JLabel tekst; Peker tilbake til Kontroll-objektet Kontroll kntrl; class KnappeLytter implements ActionListener { // indre klasse public void actionperformed(actionevent e) { kntrl.knapptrykket(); public Utsyn(Kontroll kontrl){ og her brukes den super("tre deler eksempel 1"); setfont(new Font("Serif", Font.PLAIN,18)); setsize(400,100); kntrl = kontrl; getcontentpane().setlayout(new FlowLayout()); tekst = new Label("Her kommer en melding"); getcontentpane().add(tekst); knapp= new Button("Øk"); getcontentpane().add(knapp); knapp.addactionlistener(new KnappeLytter()); setdefaultcloseoperation(jframe.exit_on_close); setvisible(true); // slutt Utsyn konstruktør Datastruktur class Modell{ private int antall; Modell (int tall) { antall = tall; public int hentnyverdi( ) { return antall; public void oppdater( ) { antall ++; // slutt klass Modell; Som sagt: Enkleste datastruktur vi kan tenke oss public void skrivut(int tall){ tekst.settext( Tallet er nå: + tall + ); // slutt class Utsyn Objekt av class Kontroll Kontroll() datastrukt = new Modell(4); vindu = new Utsyn(this); knapptrykket() datastrukt Kjøresystemet public void knapptrykket(){ int tall; datastrukt.oppdater(); tall= datastrukt. hentnyverdi(); vindu.skrivut(tall); vindu knapp tekst Utsyn (Kontroll kontrl)... tekst = new JLabel("Her kommer en melding"); getcontentpane().add(tekst); kntrl Objekt av class JButton Øk Objekt av class JLabel knapp= new JButton("Øk"); getcontentpane().add(knapp); knapp.addactionlistener(new KnappLytter()); objeket av class KnappLytter actionperformed (ActionEvent e) { kntrl.knapptrykket(); skrivut(int tall) { lab.settext( Tallet er : + tall); class KnappLytter (indre klassedatastruktur) Det er mulig å bruke en klasse med en ActionListener-metode, og test på hvilken knapp som ble trykket på (neste side) enknapp = new JButton( Noe"); enknapp.addactionlistener(new NoeSkjer()); stoppknapp = new JButton( Stopp"); stoppknapp.addactionlistener(new Stopp()); class Stopp implements ActionListener { public void actionperformed(actionevent e) { setvisible(false); // omliggende vindu System.exit (0); class NoeSkjer implements ActionListener { public void actionperformed(actionevent e) {..... Objekt av class Utsyn

Alternativt: ett lytte-objekt class Forskjellig implements ActionListener { public void actionperformed(actionevent e) { if (e.getsource( ) = = stoppknapp) { setvisible(false); System.exit (0); else if (e.getsource( ) = = enknapp) {... ActionListener lytter = new Forskjellig(); enknapp = new JButton( Noe"); enknapp.addactionlistener(lytter); stoppknapp = new JButton( Stopp"); stoppknapp.addactionlistener(lytter);