Grafiska Användargränssnitt i Java Översikt Java SWING API Paket

January 8, 2018 | Author: Anonymous | Category: Engineering & Technology, Datavetenskap, Java Programming
Share Embed Donate


Short Description

Download Grafiska Användargränssnitt i Java Översikt Java SWING API Paket...

Description

Översikt Grafiska Användargränssnitt i Java Fredrik Bengtsson [email protected]

• Java SWING API • Komponenter – JPanel, JButton, mfl...

• Layouthanterare – FlowLayout, BoxLayout, GridBagLayout, mfl...

• Menyer • Lyssnare • Modeller – DataModel, SelectionModel, mfl...

• Rita om skärmen

Java SWING API • ”Ersätter” tidigare AWT – Egentligen en utökning av AWT

• Finns i paketet javax.swing • Massor av klasser och ännu fler metoder! – kan verka överväldigande – behöver absolut inte använda alla i början

• Portabelt – ser likadant ut på alla plattformar

Paket att importera • För grafiken – import java.awt.*; – import java.awt.event.*; – import javax.swing.*;

• Om ni vill ha – import java.util.Observer; – import java.util.Observable;

• om man vill

Struktur • Fönster – JFrame, JDialog, JApplet

• JFrame – ”vanligt” fönster – plats för menyrad (menu pane) – plats för resten (content pane)

• JDialog – dialogrutor – finns flera färdiga • JFileChooser för att öppna/spara filer

Komponenter • Exempel på komponenter: – alla ärver JComponent

• JPanel – tom komponent – placera andra komponenter i denna

• JLabel – enkelt textfält

• JButton – knapp

• En komponent ”placeras” i en annan med add() • Exempel...(nästa slide)

1

Hur ser då komponenter ut? Label

Panel

JFrame • Använd getContentPane() – placera komponenter i content pane – getContentPane().add()

• Kan behöva anropa pack() – ser till att komponenterna ligger ”rätt” Text field/area

Button

JTable • Komponent som representerar en tabell

Menyer • JMenuBar – själva menyraden – sätt med

• JMenu – en meny

• JMenuItem – ett alternativ i en meny – en ”lyssnare” aktiveras när man väljer att alternativ

• Exempel (nästa slide...)

Lyssnare • Kopplas till en komponent • ”lyssnar” på händelse – – – – –

musklick tangenttryckning tryck på knapp menyval osv...

• Implementerar ett gränssnitt – t.ex. ActionListener, MouseListener, KeyListener – gränssnitten finns i java.awt.event

• Vid händelse – metod exekveras i lyssnaren

• Exempel... (nästa slide)

Layouthanterare • Bestämmer hur komponenter placeras i en Container • Alla objekt som är en Container har layouthanterare – FlowLayout – BoxLayout – GridLayout • enkelt rutnät

– GridBagLayout • kraftfullast • rutnät • gruppera komponenter i JPanel – annars tenderar det att krångla



2

Exempel på layouter

Layouthanterare • Default för content pane på JFrame

FlowLayout

– BorderLayout

• Byt layouthanterare med setLayout() BoxLayout

GridBagLayout

Modeller • Används i flera SWING-klasser • Separerar data från presentation – SWING-klasserna innehåller inte alltid datat de presenterar

• Exempel: – En JList innehåller inte data ur listan • använder ett objekt (DataModel) för att hämta data

– DataModel • ett gränssnitt som man implementerar själv – anpassat till datat

• Innehåller funktion för att hämta data – JList använder dessa

Exempel på detta

Omritning av skärmen • paintComponent() ska rita upp allt – anropas automatiskt (av operativsystemet) – Anropar paintComponent på alla underliggande komponenter • t.ex. knappar i en JPanel

• Om man vill rita nåt eget? – skugga paintComponent() • anropa alltid super.paintComponent()

• Om man vill rita om själv då? – anropa repaint() • java kör paintComponent() åt dig.

– kör inte paintComponent() själv

Mitt enkla exempel

• Mitt exempel på webben innehåller: – – – – – –

JFrame JPanel JButton menyer lyssnare Observer/Observable

• Fler exempel på suns webb – http://java.sun.com/docs/books/tutorial/uiswing/

3

Observer

Observable

+update(observable:Observable,_message:Object): void

Nästan gång:

+setChanged(): void +notifyObservers(message:Object): void

Main +main(argv[]:String): void

• JTable JPanel

– komponent som representerar en tabell

GUIMain +update(observable:Observable,_message:Object): void

DrawPanel +paintComponent(graphics:Graphics): void

DataModel +loadFile(file:File): void +getCrossState(): boolean +getCrossColor(): int +setCrossState(state:boolean): void +setCrossColor(color:int): void

GUIActionListener +actionPerformed(actionEvent:ActionEvent): void

4

View more...

Comments

Copyright � 2017 NANOPDF Inc.
SUPPORT NANOPDF