Documente Academic
Documente Profesional
Documente Cultură
obiect
Curs 13 – Swing
J
J Acest curs
› Swing
› Tratarea evenimentelor
J Swing
› O limitare a AWT este aceea ca se bazează pe sistemul de operare
pentru crearea controalelor GUI (butoane, checkbox etc.). Acest
lucru poate să difere de la un sistem de operare la altul.
J Caracteristici ale Swing
› Lightweight Components
– componente GUI nu implică sistemul de operare în creare acestora.
– Swing este parte a JFC – Java Fundation Classes
– Componente swing necesită mai puține resurse comparativ cu echivalentele lor AWT
› Pluggable Look and Feel
– Aparența poate fi separată de comportament. Acest lucru permite programatorilor să
asigneze diferite teme pentru aceeași componentă fără a-i schimba comportamentul
J Diferente AWT - Swing
J Model – View – Controller (MVC)
› Este un șablon arhitectural folosit pe larg în dezvoltare software.
› Fiecare control GUI sau componentă conține trei aspecte:
– Aparența – felul în care arată componenta când este randată pe ecran
– Felul în care componenta reacționează la acțiunile utilizatorului
– Informația de stare asociată componentei
› MVC poate fi folosit pentru a separa aceste aspecte. Odată separate,
acestea pot fi modificate separat
J MVC
› Model – gestionează
datele, logica și regulile
aplicației
› View – reprezinta datele
utilizatorului
› Controller – acceptă acțiuni
ale utilizatorului și le
convertește în comenzi
către Model și View
J Containers
› Swing furnizeaza doua tipuri de containere
– heavyweight containers (top-level containers): JFrame, JApplet, JWindow, si
Jdialog. Toate containerele mostenesc clasele AWT Component and Container
– lightweight containers: pot fi imbricate in “heavyweight containers”. Toate mostenesc
clasa JComponent: ex. JPanel
J Containers
J Containers
J Top-level Container Panes
› Fiecare top-level container definește un set de panouri. Ex. JRootPane
este unul dintre cele mai folosite panouri al cărui scop este de a gestiona
alte panouri.
› Se compune din:
– GlassPane
– ContentPane
– LayeredPane
J Panoul GlassPane
› Este un panou top-level care se află deasupra
tuturor componentelor și acoperă toate panourile
› Este o instanță transparentă a JPanel
› Este folosit pentru a:
– gestiona evenimentele generate de mouse
– desena peste orice componentă
J Panoul LayeredPane
› Este o instanță a JLayeredPane
› Permite componentelor să li se asigneze
atributul de adâncime (Z-order)
› Conține ContentPane și menu bar.
J Panoul ContentPane
› Este panoul în care sunt adaugate componentele
vizuale
› Este o instanță opacă a Jpanel
› Metode:
void setText(String str)
String getText()
void setIcon(Icon icon)
Icon getIcon()
J JLabel
import java.awt.*;
import javax.swing.*;
J JTabbedPane
JCheckBox c2;
JCheckBox c3;
JRadioButton r1;
JRadioButton r2;
ButtonGroup bg;
JLabel l;
JTextField jtf;
JPanel langs;
JPanel gender;
JPanel name;
JTabbedPane jtp;
Main() {
setSize(500, 300);
setTitle("My swing window");
setLayout(new FlowLayout());
c1 = new JCheckBox("C");
c2 = new JCheckBox("C++");
c3 = new JCheckBox("Java");
langs = new JPanel();
langs.add(c1);
J JTabbedPane langs.add(c2);
langs.add(c3);
r1 = new JRadioButton("Male");
r2 = new JRadioButton("Female");
bg = new ButtonGroup();
bg.add(r1);
bg.add(r2);
gender = new JPanel();
gender.add(r1);
gender.add(r2);
l = new JLabel("Enter Name: ");
jtf = new JTextField(20);
name = new JPanel();
name.add(l);
name.add(jtf);
jtp = new JTabbedPane();
jtp.addTab("Languages", langs);
jtp.addTab("Gender", gender);
jtp.addTab("Name", name);
add(jtp);
J JTabbedPane
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Main mf = new Main();
}
}
J List boxes
› Componentă vizuală obișnuită din care se poate selecta un element
› Este creată prin intermediul clasei generice Jlist
JList<type>
› Metode:
int getSelectedIndex()
E getSelectedValue()
J JList
public class Main extends JFrame {
JList<String> jl;
JScrollPane jsp;
Main() {
setSize(500, 300);
setTitle("My swing window");
setLayout(new FlowLayout());
String[] branches = {"CSE", "ECE", "EEE", "IT", "MECH", "CIV"};
jl = new JList<String>(branches);
jsp = new JScrollPane(jl);
jsp.setPreferredSize(new Dimension(120, 80));
add(jsp);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Main mf = new Main();
}
}
J Combo box
› Este un control de tip pop-up din care se poate selecta doar un item
› Poate fi creat prin intermediul clasei generice JComboBox
JComboBox<type>
› Constructori:
JComboBox()
JComboBox(E[] items)
› Metode: void addItem(E obj)
Object getSelectedItem()
int getSelectedIndex()
› Generează ActionEvent la selectarea/deselectarea unui element
din listă
J JComboBox
public class Main extends JFrame
{
JComboBox<String> jc;
Main() {
setSize(500, 300);
setTitle("My swing window");
setLayout(new FlowLayout());
String[] branches = {"CSE", "ECE", "EEE", "IT", "MECH", "CIV"};
jc = new JComboBox<String>(branches);
add(jc);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Main mf = new Main();
}
}
J Tabele
› Control ce poate fi folosit la afișarea datelor pe linii și coloane
› Fiecare coloană are un nume
› Poate fi creat prin intermediul clasei JTable
› Constructori:
JTable(Object[][] data, Object[] colHeads)
› unde:
– data este un tablou bidimensional care conține datele de afișat.
– colHeads este un tablou unidimensional cu denumirile coloanelor
› JTable nu furnizează și proprietatea de scroll motiv pentru care trebuie
împachetat în JScrollPanel
› Generează ListSelectionEvent la selectarea unui element din tabel și
TableModelEvent la schimbarea unei date din tabel
public class Main extends JFrame{
JTable jt;
JScrollPane jsp;
J JTable Main() {
setSize(500, 300);
setTitle("My swing window");
setLayout(new FlowLayout());
String[] colHeads = {"Student", "Mate", "Fizica", "Paoo"};
String[][] data = { {"Gica", "7.7", "8.0", "7.5"},
{"Dorel", "8.9", "8.6", "8.3"},
{"Ion", "7.4", "8.0", "7.5"},
{"Costel", "7.8", "8.0", "7.5"},
{"Marin", "8.9", "8.6", "8.3"},
{"Nicu", "7.7", "8.4", "7.2"} };
jt = new JTable(data, colHeads);
jsp = new JScrollPane(jt);
jsp.setPreferredSize(new Dimension(450, 100));
add(jsp);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
Main mf = new Main();
}
J JTable
J Arhitectura bazată pe evenimente
› EDA – Event-Driven Arhitecture – reprezintă un model architectural utilizat în
multe aplicații software datorită flexibilității și capacității de a reprezenta facil
lumea reală
› EDA reprezintă un tipar arhitectural bazat pe entități de tip eveniment și acțiuni
de tip: generare/creare de evenimente, detecție de evenimente, consumare de
evenimente și începerea unui set de activități în momentul detecției unui
eveniment
› O aplicație dezvoltată pe baza acestui model arhitectural va defini și construi
următoarele entități:
– evenimente
– surse sau producători de evenimente – sources
– consumatori de evenimente – sinks
– protocol de transmitere și interpretare a evenimentelor dinspre sursa spre consumator
› Java Swing API este un framework GUI dezvoltat pe baza acestui tip de
arhitectură
J Observer Pattern
J Observer Pattern
› Entitățile de tip Observer reprezintă clasa de baza/interfața pentru orice
obiect care vrea să se înscrie ca și observator față de un anumit
Subject.
› Subject reprezinta clasa de baza pentru orice entitate care defineste
elemente de interes pentru observator.
› Subject menține o lista de entități Observer și un API (i.e. metode) care
permit:
– înregistrarea/eliminarea entităților de tip Observer în lista respectivă
– notificarea observatorilor înregistrați la momentul producerii unui eveniment de interes în
ciclul de viata al subiectului.
› O entitate de tip Observer trebuie să definească metoda notify().
Aceasta este apelată de către Subject în momentul în care dorește să
trimită o notificare către observatori. Metoda este suprascrisă în clasele
specializate ale clasei de bază Observer pentru a defini reacția potrivită
în momentul în care entitățile de tip Subject notifică evenimentele de
interes.
J Observer Pattern
J }
observers = new ArrayList<Observer>();