+ All Categories
Home > Documents > Föreläsning 15 (16)

Föreläsning 15 (16)

Date post: 22-Jan-2016
Category:
Upload: lanza
View: 60 times
Download: 0 times
Share this document with a friend
Description:
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 - PowerPoint PPT Presentation
Popular Tags:
23
Föreläsning 15 (16) Introduktion till Swing
Transcript
Page 1: Föreläsning 15 (16)

Föreläsning 15 (16)

Introduktion till Swing

Page 2: Föreläsning 15 (16)

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

Page 3: Föreläsning 15 (16)

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

Page 4: Föreläsning 15 (16)

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?

Page 5: Föreläsning 15 (16)

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

Page 6: Föreläsning 15 (16)

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?

Page 7: Föreläsning 15 (16)

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(new FlowLayout());

Möjlighet till absolut positionering// sätter Layout till ingen alls (null)setLayout(null);

Page 8: Föreläsning 15 (16)

java.awt

Component

javax.swing

JComponent

Klasshierarki (AWT och Swing)java.lang

Object

Container

JDialog

JFrame

java.applet

Applet JApplet

WindowPanel Dialog

Frame

JButton JLabel JPanel JTextField

Page 9: Föreläsning 15 (16)

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

Page 10: Föreläsning 15 (16)

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

Page 11: Föreläsning 15 (16)

JLabel (fast text)

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 applikationJLabel 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);

Page 12: Föreläsning 15 (16)

JButton (knapp)

En komponent man kan trycka på Genererar i så fall ett ActionEvent

knapp = new JButton(new ImageIcon("figur.gif"))knapp.setBounds(10, 5, 100, 35);knapp.setRolloverIcon(new ImageIcon("figur2.gif

JButton knapp = new JButton("Knapp");knapp.setBounds(10, 5, 100, 35);knapp.setToolTipText("Tryck på mig!");

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);

Page 13: Föreläsning 15 (16)

JTextField (textfält)

En rad där text kan skrivas in Enter genererar ett ActionEvent

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);

Page 14: Föreläsning 15 (16)

JTextArea (textruta)

Flera rader där text kan skrivas in Måste lägga till scroll-lister

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);

Page 15: Föreläsning 15 (16)

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

Page 16: Föreläsning 15 (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ällerJButton knapp = new JButton("Tryck på mig!");

if (ae.getSource() == klick) // Knappen klick har genererat händelsen (tryckts på)

Page 17: Föreläsning 15 (16)

Registrera En Lyssnare För att registrera en Action-lyssnare

till en knapp anropas följande metodJButton 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å } }

Page 18: Föreläsning 15 (16)

FlowLayout Placerar komponenterna från vänster

till höger i containern Börjar på en ny rad när den är fylld Ändrar placering automatiskFöre storleksändring Efter storleksändring

Page 19: Föreläsning 15 (16)

GridLayout GridLayout ser till att alla

komponenter har samma storlek Placeras i ett rutnät som definieras

när managern konstruerasFöre storleksändring Efter storleksändring

Page 20: Föreläsning 15 (16)

BorderLayout 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 areorEfter storleksändringFöre storleksändring

Page 21: Föreläsning 15 (16)

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 BorderLayout

JPanel southPanel = new JPanel(new GridLayout(1, 3));

Page 22: Föreläsning 15 (16)

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);

Page 23: Föreläsning 15 (16)

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 bildknapparImageIcon knappIcon = new ImageIcon("image.gif");JButton knapp = new JButton("Bildknapp", knappIcon);

Kan lägga till Border runt komponentBorder loweredbevel = BorderFactory.createLoweredBevelBorder();JPanel southPanel = new JPanel();southPanel.setBorder(loweredbevel);


Recommended