Presentasjon lastes. Vennligst vent

Presentasjon lastes. Vennligst vent

Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else.

Liknende presentasjoner


Presentasjon om: "Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."— Utskrift av presentasjonen:

1 Programmering i Java versjon august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 13, side 3 GUI-komponenter i Swing Demoprogram på j2sdk1.5/demo/jfc/SwingSet2/ Kjøres fra kommandolinjen: >java -jar SwingSet2.jar

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

5 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 13, side 6 Kildekoden og meldingsutvekslingen der class TrykknappVindu extends JFrame { public TrykknappVindu(String tittel) { setTitle(tittel); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); LayoutManager layout = new FlowLayout(); setLayout(layout); JButton knapp = new JButton("Trykk her"); // lager knappen add(knapp); // legger knappen i beholderen Knappelytter knappelytteren = new Knappelytter(); // lager en lytter knapp.addActionListener( knappelytteren); // knytter lytteren til knappen pack(); // tilpasser vindusstørrelsen } class Knappelytter implements ActionListener { public void actionPerformed(ActionEvent hendelse) { System.out.println("Du trykket på knappen."); } class TestTrykknappVindu { public static void main(String[] args) { TrykknappVindu etVindu = new TrykknappVindu("Et vindu med en knapp"); etVindu.setVisible(true); } 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 bestemt 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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(int mnemonic) –public void setEnabled(boolean åpen) –public void setText(String text) Gjør alle oppgavene side

8 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 13, side 8 Mer om trykknappeksemplet class FargeknappVindu extends JFrame { public FargeknappVindu(String tittel) { setTitle(tittel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); JButton knapp = new JButton("Trykk her"); knapp.setBackground(Color.blue); // startfargen add(knapp); Knappelytter knappelytteren = new Knappelytter(knapp); knapp.addActionListener(knappelytteren); pack(); } class Knappelytter implements ActionListener { private JButton knapp; public Knappelytter(JButton startKnapp) { knapp = startKnapp; } public void actionPerformed(ActionEvent hendelse) { Color farge = knapp.getBackground(); if (farge == Color.red) knapp.setBackground(Color.blue); else knapp.setBackground(Color.red); } class FargeknappVindu2 extends JFrame { private JButton knapp = new JButton("Trykk her"); public FargeknappVindu2(String tittel) { setTitle(tittel); setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); knapp.setBackground(Color.red); // startfargen add(knapp); Knappelytter knappelytteren = new Knappelytter(); knapp.addActionListener(knappelytteren); pack(); } private class Knappelytter implements ActionListener { public void actionPerformed( ActionEvent hendelse) { Color farge = knapp.getBackground(); if (farge == Color.red) knapp.setBackground(Color.blue); else knapp.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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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. Vi bruker indre klasser 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 13, side 10 Tekstfelt class NavneVindu extends JFrame { private JTextField navnefelt = new JTextField(20); private JLabel hilsen = new JLabel("Her kommer det en hilsen"); public NavneVindu(String tittel) { setTitle(tittel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new FlowLayout()); JLabel ledetekst = new JLabel("Skriv navnet ditt:"); add(ledetekst); add(navnefelt); JButton knapp = new JButton("Trykk her"); add(knapp); Knappelytter knappelytteren = new Knappelytter(); knapp.addActionListener(knappelytteren); add(hilsen); pack(); } 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 472.

11 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else Lervik og Vegard B. Havdal, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 13, side 12 BorderLayout - standard for ContentPanes class BorderLayoutVindu extends JFrame { public BorderLayoutVindu(String tittel) { setTitle(tittel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new BorderLayout()); // kan sløyfes, er standard Font storSkrift = new Font("SansSerif", Font.BOLD, 20); JButton knappEn = new JButton("1"); knappEn.setFont(storSkrift); add(knappEn, BorderLayout.WEST); JButton knappTo = new JButton("2"); knappTo.setFont(storSkrift); add(knappTo, BorderLayout.CENTER); JButton knappTre = new JButton("3"); knappTre.setFont(storSkrift); add(knappTre, BorderLayout.EAST); JButton knappFire = new JButton("4"); knappFire.setFont(storSkrift); add(knappFire, BorderLayout.NORTH); JButton knappFem = new JButton("5"); knappFem.setFont(storSkrift); add(knappFem, BorderLayout.SOUTH); pack(); } 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk Kapittel 13, side 13 GridLayout class GridLayoutVindu extends JFrame { 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 GridLayoutVindu(String tittel) { setTitle(tittel); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLayout(new GridLayout(4, 2, 5, 5)); JLabel ledetekst = new JLabel("Navn:", JLabel.RIGHT); add(ledetekst); add(navn); ledetekst = new JLabel("Adresse:", JLabel.RIGHT); add(ledetekst); add(adresse); ledetekst = new JLabel("Tlf.:", JLabel.RIGHT); add(ledetekst); add(tlf); ledetekst = new JLabel("E-post:", JLabel.RIGHT); add(ledetekst); add(ePost); pack(); } 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, 3.utgave, Stiftelsen TISIP og Gyldendal Akademisk 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 august 2004 Kun til bruk i tilknytning til læreboka ”Programmering i Java” skrevet av Else."

Liknende presentasjoner


Annonser fra Google