1 / 23

Föreläsning 15 (16)

Föreläsning 15 (16). Introduktion till Swing. Historik (java.awt). JDK 1.0 – AWT (Abstract Window Toolkit) Paket för gränssnittsprogrammering Har en del nackdelar: Använder s.k. native code Stödjer endast komponenter gemensamma för alla OS Antar plattformens look and feel

lanza
Download Presentation

Föreläsning 15 (16)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Föreläsning 15 (16) Introduktion till Swing

  2. Historik (java.awt) • JDK 1.0 – AWT (Abstract Window Toolkit) • Paket för gränssnittsprogrammering • Har en del nackdelar: • Använder s.k. native code • Stödjer endast komponenter gemensamma för alla OS • Antar plattformens look and feel • Awful Window Toolkit!? • Fortfarande nödvändig att använda

  3. Historik (javax.swing) • JDK 1.2 – Swing helt skrivet i Java • Bygger vidare på AWT • Innehåller fler komponenter än AWT • Har en look and feel som är oberoende av plattformen • Komponenter i Swing börjar på 'J’ • Swing bör användas framför AWT

  4. Komponenter (JComponent) • Används för att bygga upp ett GUI • I stort sett allt som syns på skärmen är komponenter som kan: • Presenteras, positioneras • Visa grafik, fånga händelser e.t.c • Några användbara metoder är: void setBackground(Color c) // Sätter bakgrundsfärgenvoid setForeground(Color c) // Sätter förgurndsfärg (text)void setFont(Font f) // Sätter font på t.ex textvoid setToolTipText(String text) // Sätter hjälptext (muspekaren ovanför)void setBounds(int x, int y, // Flyttar och ändrar storlek int width, int height) void setEnabled(boolean b) // Valbar eller inte ("gråa ut")boolean hasFocus() // Är komponenten vald?

  5. Containers (Container) • Container är ett fönster eller en yta i vilken komponenter kan placeras • Används för att gruppera GUI-objekt • JFrame – applikationsfönster • JDialog – dialogfönster • JApplet – tilldelas yta av webbläsaren • JPanel – tom yta att "rita" på • JComponent är också en container

  6. Containers (forts) • Komponenter läggs till en container genom metoden add() void add(Component comp) // Lägger till en komponent • Fler användbara metoder i klassen: int getHeight() // Hur bred?int getWidth() // Hur hög?Component getComponent(int n) // Det n:te komponentenvoid removeComponent(Component c) // Tar bort komponetenvoid setLayout(LayoutManager mgr) // Sätter layoutInsets getInsets() // För att kolla ytanvoid paint(Graphics g) // Rita i containernvoid setBackground(Color c) // Bakgrundsfärgenvoid setVisible(boolean b) // Visas eller inte?

  7. LayoutManager • Positioneringen av komponenterna görs med en LayoutManager • Placerar dynamiskt ut komponenter • Enklast att använda är FlowLayout • placeras ut i den följd de läggs till // sätter Layout till FlowLayoutsetLayout(newFlowLayout()); • Möjlighet till absolut positionering // sätter Layout till ingen alls (null)setLayout(null);

  8. Klasshierarki (AWT och Swing) java.lang javax.swing java.awt Component JComponent Object Container JDialog JFrame JPanel JApplet Applet Window Panel Dialog Frame JButton JLabel JTextField java.applet

  9. Applikationsfönster (JFrame) • Är ett fönster som innehåller: • En titelrad • Min- och max-knappar • Stäng-knapp • En ram runt fönstret • Eventuellt en meny • En applikation med ett GUI måste alltid minst ha ett ramfönster

  10. JFrame (skapa) • JFrame har bl.a dessa konstruktorer // Skapar en tom JFrame utan titelJFrame myJFrame1 = new JFrame(); // Skapar en JFrame med en text på titelradenJFrame myJFrame2 = new JFrame("HelloWorld"); • Några användbara metoder: Container getContentPane() // Här placerar vi komponentervoid setSize(int width, int height) // Storleken på fönstretvoid setBounds(int x, int y, int w, int h) // placeringvoid setTitle(String titel) // Texten på titelradenvoid setResizable(boolean resizable) // Fast storlek eller ejvoid setLayout(LayoutManager mgr) // Fönstrets layoutvoid setVisible(boolean b) // true = fönstret synsvoid setIconImage(Image image) // Fönstrets ikonvoid setDefaultCloseOperation(int) // Händelse vid stängning

  11. JLabel(fast text) JLabel jlabel = new JLabel("En textsträng.");jlabel.setBounds(10, 5, 100, 20);String text = jlabel.getText(); jlabel = new JLabel(new ImageIcon("figur.gif");jlabel.setHorizontalTextPosition( SwingConstants.RIGHT);jlabel.setText("Text och bild.");jlabel.setForeground(Color.black); • Består endast av en fast text som inte kan väljas eller manipuleras • Kan inte generera några händelser • Används mest som information eller ledtext i en applikation

  12. JButton(knapp) JButton knapp = new JButton("Knapp");knapp.setBounds(10, 5, 100, 35);knapp.setToolTipText("Tryck på mig!"); knapp = new JButton(new ImageIcon("figur.gif"))knapp.setBounds(10, 5, 100, 35);knapp.setRolloverIcon(new ImageIcon("figur2.gif knapp = new JButton("Avbryt");knapp.setBounds(10, 5, 100, 35);knapp.setText("Ok");knapp.setMnemonic('O'); // Aktivera med Alt+Oknapp.setEnabled(false);knapp.addActionListener(this); • En komponent man kan trycka på • Genererar i så fall ett ActionEvent

  13. JTextField(textfält) JTextField txt = new JTextField("Textfält");txt.setBounds(10, 5, 150, 20); String text = txt.getText(); // Textfält txt = new JTextField();txt.setBounds(10, 5, 150, 20);txt.setText("123 abc ÅÄÖ")txt.setFont(new Font("Courier", Font.PLAIN, 16)String text2 = txt.getSelectedText(); // abc ); txt.setEditable(false);txt.selectAll();txt.addActionListener(this); • En rad där text kan skrivas in • Enter genererar ett ActionEvent

  14. JTextArea(textruta) JTextArea area = new JTextArea();JScrollPane scroll = new JScrollPane(txt);scroll.setBounds(10, 5, 175, 60);txt.setText("En text som sträcker sig " + "utanför våran textarea"); txt.setLineWrap(true); // Radbrytning påtxt.setWrapStyleWord(true); // Bryt efter ordettxt.append("\nAppend() lägger till text" + "\nsist i rutan");txt.replaceRange("håller sig innanför", 12, 32); • Flera rader där text kan skrivas in • Måste lägga till scroll-lister

  15. Händelsehantering • Program med ett GUI genererar händelser (t.ex. knapptryck) • Med händelsehantering avses att hantera dessa när de inträffar • Till en komponent registreras olika lyssnare som lyssnar på händelser • När händelsen inträffar skickas den till de registrerade händelselyssnare

  16. Action-händelser • Gränssnittet ActionListener innehåller endast en metod • actionPerformed(ActionEvent ae)signalerar att en komponent klickats på • Av ActionEvent-objektet kan man få reda på vilken komponent det gäller JButton knapp = newJButton("Tryck på mig!"); if (ae.getSource() == klick) // Knappen klick har genererat händelsen (tryckts på)

  17. Registrera En Lyssnare • För att registrera en Action-lyssnare till en knapp anropas följande metod JButton knapp = new JButton("Tryck på mig!");// Registrerar den egna klassen som en lyssnare på ActionEventknapp.addActionListener(this); • Därefter måste gränssnittet ActionListener implementeras public class MyFrame extends JFrame implements ActionListener { public void actionPerformed(ActionEvent ae) {if (ae.getSource() == knapp) // Knappen knapp har tryckts på } }

  18. FlowLayout Före storleksändring Efter storleksändring • Placerar komponenterna från vänster till höger i containern • Börjar på en ny rad när den är fylld • Ändrar placering automatisk

  19. GridLayout Före storleksändring Efter storleksändring • GridLayout ser till att alla komponenter har samma storlek • Placeras i ett rutnät som definieras när managern konstrueras

  20. BorderLayout Före storleksändring Efter storleksändring • Delar upp ytan i fem areor: • north, south, east, west och center • När en komponent läggs till måste detta ske i någon av dessa areor

  21. JPanel • En generell container-klass som används för att innehålla ett antal komponenter • Har ingen ram och används därför normalt inuti en annan container • Används väldigt ofta vid mer avancerad GUI JPanel westPanel = new JPanel(); // Default FlowLayoutwestPanel.setLayout(new BorderLayout()); // Får BorderLayoutJPanel southPanel = new JPanel(new GridLayout(1, 3));

  22. JPanel (forts) • Börja med att skapa en Panel • Skapa komponenterna • Lägg till komponenterna i panelen • Lägg till panelen i fönstret // I konstruktornJPanel westPanel = new JPanel(new GridLayout(3, 1));westPanel.add(new JButton("Öka talet"));westPanel.add(new JButton("Nollställ talet"));westPanel.add(new JButton("Avsluta"));getContantpane.add("West", westPanel);

  23. Lite Nytt I Swing • Kan använda HTML-kod i texten för vissa komponenter (t.ex JLabel) JLabel label = new JLabel();label.setText"<html><font size=10>hej!</font></html>"); • Lätt att skapa bildknappar ImageIcon knappIcon = new ImageIcon("image.gif");JButton knapp = new JButton("Bildknapp", knappIcon); • Kan lägga till Border runt komponent Border loweredbevel = BorderFactory.createLoweredBevelBorder();JPanel southPanel = new JPanel();southPanel.setBorder(loweredbevel);

More Related