Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon 2000-08-15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon 2000-08-15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik."— Utskrift av presentasjonen:

1 Programmering i Java versjon Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13 GUI-programmering og hendelser GUI = Graphical User Interface GUI-komponenterside 2-3 Et utdrag av klassetreetside 4 Å trykke på en knappside 5-6 Litt API (Container, JButton, AbstractButton) side 7 Mer om trykknappeksempletside 8 Indre klasserside 9 Tekstfeltside 10 Å håndtere layoutenside 11-14

2 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 2 GUI-komponenter avkrysningsrute / check box ledetekst / label tekstboks / textbox trykknapp /button radioknapp / radiobutton gruppeboks /group box nedtrekksliste / drop-down list box verdisettingsboks / spin box

3 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 3 GUI-komponenter i Swing Demoprogram på jdk1.3/demo/jfc/SwingSet2/SwingSet2.html

4 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 4 Et utdrag av klassetreet JComponent JTextComponent AbstractButton JComboBox JLabel JList JMenuBar JPane JPopupMenu JScrollbar JScrollPane JTable JTree JToggleButton JButton JMenuItem JCheckBoxJRadioButton JRadioButtonMenuItemJCheckBoxMenuItem ContainerComponentObject JPanel JApplet AppletPanel JMenu FontColor JTextAreaJTextField Husk J’en først i klasse- navnene!

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 5 Å trykke på en knapp En hendelse inntreffer hver gang du trykker på knappen. Brukerne kan initiere mange typer hendelser i et GUI-program. En hendelse kan føre til at programmet reagerer på en bestemt måte. Vi kan tenke oss at dette er programmert som en evig løkke med en kjempestor switch-setning inne i løkken (se til høyre). Løkken og switch-setningen er ferdig laget for oss, vi skal bare lage innholdet i case-blokkene. while (true) { switch (hendelse) { case passordinput sjekk passord break; case utskrift skriv ut dokumentet break; case knappen "beregn skatt" er trykket på beregn skatt break; case } En linje utskrift til konsollet for hvert trykk på knappen: Du trykket på knappen!

6 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 6 Kildekoden og meldingsutvekslingen der public class TrykknappApplet extends JApplet { public void init() { Container guiBeholder = getContentPane(); LayoutManager layout = new FlowLayout(); guiBeholder.setLayout(layout); JButton knapp = new JButton("Trykk her!!"); guiBeholder.add(knapp); Knappelytter knappelytteren = new Knappelytter(); knapp.addActionListener(knappelytteren); } class Knappelytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { System.out.println("Du trykket på knappen!"); } 1. Lag knappen. 2. Legg knappen i GUI-beholderen. 3. Lag lytterobjektet. 4. Registrer lytterobjektet hos knappen, slik at det reagerer når noen trykker på knappen. Hver type lytter krever at vi implementerer et gitt interface. knappelytteren: Knappelytter trykk actionPerformed() System.out println(....) kildenlytteren knapp: JButton

7 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 7 Litt API Klassen java.awt.Container –public void setLayout(LayoutManager layouthåndterer) –public Component add(Component comp) Klassen javax.swing.JButton –public JButton() –public JButton(String tekst) –public JButton(Icon ikon) –public JButton(String tekst, Icon ikon) Klassen javax.swing.AbstractButton –public void addActionListener(ActionListener enLytter) –public void setMnemonic(char mnemonic) –public void setEnabled(boolean åpen) –public void setText(String text) Gjør alle oppgavene side 384.

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 8 Mer om trykknappeksemplet public class FargeKnappApplet extends JApplet { public void init() { Container guiBeholder = getContentPane(); guiBeholder.setLayout(new FlowLayout()); JButton knapp = new JButton("Trykk her!!"); guiBeholder.add(knapp); Knappelytter knappelytteren = new Knappelytter(guiBeholder); knapp.addActionListener(knappelytteren); } class Knappelytter implements ActionListener { private Container guiBeholderen; public Knappelytter(Container startBeholder) { guiBeholderen = startBeholder; } public void actionPerformed(ActionEvent hendelse) { guiBeholderen.setBackground(Color.red); } public class FargeknappApplet2 extends JApplet { private Container guiBeholder; public void init() { guiBeholder = getContentPane(); guiBeholder.setLayout(new FlowLayout()); JButton knapp = new JButton("Trykk her!"); guiBeholder.add(knapp); Knappelytter knappelytteren = new Knappelytter(); knapp.addActionListener(knappelytteren); } private class Knappelytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { guiBeholder.setBackground(Color.red); } Hva hvis knappetrykket skal føre til at bakgrunnsfargen blir rød? Mer praktisk med en indre klasse:

9 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 9 Indre klasser En indre klasse er å betrakte som et medlem i klassen. Et objekt av en indre klasse tilhører alltid et bestemt objekt av den ytre klassen. Tilgjengeligheten til den indre klassen styres av en eventuell tilgjengelighetsmodifikator. I dette kurset er alle indre klasser private. Vi bruker indre klasser kun i forbindelse med GUI-programmering –Vi lager lytterklasser. –Vi lager kompliserte GUI ved å sette sammen flere deler, hver slik del (”panel”) vil være et objekt av en indre klasse.

10 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 10 Tekstfelt public class NavneApplet extends JApplet { private Container guiBeholder; private JTextField navnefelt = new JTextField(20); private JLabel hilsen = new JLabel(); public void init() { guiBeholder = getContentPane(); guiBeholder.setLayout(new FlowLayout()); JLabel ledetekst = new JLabel("Skriv navnet ditt:"); guiBeholder.add(ledetekst); guiBeholder.add(navnefelt); JButton knapp = new JButton("Trykk her!"); guiBeholder.add(knapp); Knappelytter knappelytteren = new Knappelytter(); knapp.addActionListener(knappelytteren); guiBeholder.add(hilsen); } private class Knappelytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { String navn = navnefelt.getText(); hilsen.setText("Hei på deg, " + navn + "!"); } Klassen javax.swing.JLabel –public JLabel() –public JLabel(String tekst) –public JLabel(String tekst, int horisontalJustering) –public void setText(String tekst) Klassen javax.swing.JTextField –public JTextField() –public JTextField(String tekst) –public JTextField(int antKolonner) –public JTextField(String tekst, int antKolonner) –public void setHorizontalAlignment(int horsiontalJustering) –public int getHorizontalAlignment() –public void setFont(Font nySkrifttype) –public void addActionListener(ActionListener enLytter) Klassen javax.swing.text.JTextComponent –public String getText() –public void setText(String tekst) –public void setEditable(boolean åpen) Gjør alle oppgavene side 391.

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 11 Å håndtere layouten Vi kan bestemme plasseringen absolutt ved å angi pikselposisjonen til en komponent. Det er imidlertid vanlig å bruke layout-håndterere for å styre utleggingen av komponentene. Hittil har vi brukt FlowLayout: Komponentene legges ut fra venstre mot høyre, sentrert på linjene:

12 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 12 BorderLayout - standard for appleter public class TestBorderLayout extends JApplet { public void init() { Container guiBeholder = getContentPane(); Font storSkrift = new Font("SansSerif", Font.BOLD, 20); JButton knappEn = new JButton("1"); knappEn.setFont(storSkrift); guiBeholder.add(knappEn, BorderLayout.WEST); JButton knappTo = new JButton("2"); knappTo.setFont(storSkrift); guiBeholder.add(knappTo, BorderLayout.CENTER); JButton knappTre = new JButton("3"); knappTre.setFont(storSkrift); guiBeholder.add(knappTre, BorderLayout.EAST); JButton knappFire = new JButton("4"); knappFire.setFont(storSkrift); guiBeholder.add(knappFire, BorderLayout.NORTH); JButton knappFem = new JButton("5"); knappFem.setFont(storSkrift); guiBeholder.add(knappFem, BorderLayout.SOUTH); } 1 - WEST 2 - CENTER 3 - EAST 4 - NORTH 5 - SOUTH 1 - WEST 2 - CENTER 3 - EAST 1 - NORTH 2 - CENTER 3 - SOUTH

13 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 13 GridLayout public class TestGridLayout extends JApplet { private JTextField navn = new JTextField(15); private JTextField adresse = new JTextField(15); private JTextField tlf = new JTextField(15); private JTextField ePost = new JTextField(15); public void init() { Container guiBeholder = getContentPane(); guiBeholder.setLayout(new GridLayout(4, 2, 5, 5)); JLabel ledetekst = new JLabel("Navn:", JLabel.RIGHT); guiBeholder.add(ledetekst); guiBeholder.add(navn); ledetekst = new JLabel("Adresse:", JLabel.RIGHT); guiBeholder.add(ledetekst); guiBeholder.add(adresse); ledetekst = new JLabel("Tlf.:", JLabel.RIGHT); guiBeholder.add(ledetekst); guiBeholder.add(tlf); ledetekst = new JLabel("E-post:", JLabel.RIGHT); guiBeholder.add(ledetekst); guiBeholder.add(ePost); } Argumentene til GridLayout() er: antall rader, antall kolonner, horisontal avstand mellom rutene, vertikal avstand mellom rutene.

14 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, Stiftelsen TISIP og Gyldendal Akademisk ISBN Kapittel 13, side 14 Å dele en GUI-beholder i flere små beholdere (paneler) Vis programliste 13.8 side nordre del, GridLayout midtre del, FlowLayout søndre del, FlowLayout


Laste ned ppt "Programmering i Java versjon 2000-08-15 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik."

Liknende presentasjoner


Annonser fra Google