Programowanie GUI id 396017 Nieznany

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

1 / 26




Programowanie obiektowe

Programowanie graficznych

interfejsów u

ż

ytkownika

Paweł Rogali

ń

ski

Instytut Informatyki, Automatyki i Robotyki
Politechniki Wrocławskiej

pawel.rogalinski pwr.wroc.pl

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

2 / 26

The Java Tutorials

http://java.sun.com/docs/books/tutorial/ui/index.html

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

3 / 26

GUI – graficzny interfejs u

ż

ytkownika

Standardowe pakiety

java.awt

(

AWT

) oraz

javax.swing

(

Swing

) zawieraj

ą

klasy definiuj

ą

ce wiele ró

ż

norodnych komponentów wizualnej interakcji programu z

u

ż

ytkownikiem (okna, przyciski, listy itp.). S

ą

one reprezentowane przez klasy

wywodz

ą

ce si

ę

z klasy

java.awt.Component

.

Komponenty

s

ą

umieszczane

w

kontenerach – specjalnych komponentach

umo

ż

liwiaj

ą

cych

przechowywanie

innych

elementów GUI (komponentów oraz innych

kontenerów)

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

4 / 26

Komponenty AWT a komponenty Swingu

AWT

(

Abstract Windowing Toolkit

) - zestaw klas definiuj

ą

cych proste komponenty

interakcji wizualnej. S

ą

to komponenty ci

ęż

kie – realizowane poprzez u

ż

ycie graficznych

bibliotek GUI systemu operacyjnego:



ubogie mo

ż

liwo

ś

ci graficzne i interakcyjne,



brak komponentów zaawansowanych (np. tabel)



zale

ż

ny od platformy systemowej wygl

ą

d komponentów,

Pakiet Swing

(

JFC – Java Foundation Clases

) - zestaw klas definiuj

ą

cych wiele

komponentów i kontenerów interakcji wizualnej o zaawansowanych wła

ś

ciwo

ś

ciach.

S

ą

to w wi

ę

kszo

ś

ci komponenty lekkie, które:



s

ą

rysowane za pomoc

ą

kodu Javy w obszarze jakiego

ś

komponentu ci

ęż

kiego

(zwykle kontenera najwy

ż

szego poziomu)



moj

ą

wygl

ą

d niezale

ż

ny od platformy systemowej,



mog

ą

by

ć

przezroczyste, a zatem mog

ą

przybiera

ć

wizualnie dowolne kształty,

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

5 / 26

Komponenty AWT a komponenty Swingu

Component

< klasa abstrakcyjna >

wspólne wła

ś

ciwo

ś

ci

wszystkich komponentów

Container

wspólne wła

ś

ciwo

ś

ci

wszystkich kontenerów

Terminalne

komponenty AWT

kontenery AWT

okna AWT

JComponent

< klasa abstrakcyjna >

wspólne wła

ś

ciwo

ś

ci wszystkich

lekkich

komponentów Swingu

Okna Swingu

b

ę

d

ą

ce kontenerami

najwy

ż

szego poziomu

SWING

AWT

Lekkie komponenty Swingu

lekkie kontenery i okna wewn

ę

trzne

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

6 / 26

Komponenty i kontenery

Elementy GUI dziel

ą

si

ę

na

komponenty

(kontrolki, sterowniki) oraz

kontenery

,

które s

ą

u

ż

ywane do przechowywania innych elementów.

komponenty:

kontenery:



przyciski (

Button

,

JButton

)



płótna (

Canvas

)



pola wyboru (

Checkbox

,

JCheckbox

)



etykiety (

Label

,

JLabel

)



paski przewijania (

ScrollBar

,

JScrollBar

)



listy (

List

,

JList

)



listy rozwjane (

Choice

)



polecenia menu (

MenuItem

,

JMenuItem

)



komponenty tekstowe

(

TextField

,

TextArea

,

JTextField

,

JTextArea

)



kontenery (

Container

)



okna (

Window

,

JWindow

)



ramki (

Frame

,

JFrame

)



okna dialogowe (

Dialog

,

JDialog

)



dialogi plikowe (

FileDialog

,

JFileChooser

)



panele (

Panel

,

JPanel

)



okna przewijalne (

ScrollPane

,

JScrollPane

)

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

7 / 26

Wła

ś

ciwo

ś

ci komponentów AWT i Swing

Wszystkie komponenty wywodz

ą

si

ę

z abstrakcyjnej klasy

Component

,

która definiuje m.in. metody ustalaj

ą

ce wła

ś

ciwo

ś

ci komponentów:



get

NNN

()

– pobieranie wła

ś

ciwo

ś

ci komponentu



is

NNN

()

– sprawdzanie wła

ś

ciwo

ś

ci zerojedynkowych lub

boolean



set

NNN

(...)

– ustalanie wła

ś

ciwo

ś

ci komponentu

gdzie

NNN

jest nazw

ą

wła

ś

ciwo

ś

ci.



background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

8 / 26

Wła

ś

ciwo

ś

ci komponentów AWT i Swing

Wa

ż

niejsze wspólne wła

ś

ciwo

ś

ci komponentów:

is.../setVisible

– sprawdza/ustawia widoczno

ść

komponentu,

is.../setEnabled

– sprawdza/ustawia dost

ę

pno

ść

komponentu,

get.../setName

– podaje/ustawia nazw

ę

komponentu,

get.../setFont

– podaje/ustawia czcionk

ę

,

get.../setCursor

– podaje/ustawia kursor dla komponentu,

getParent

– podaje kontener zawieraj

ą

cy komponent,

get.../setLocation

– podaje/ustawia poło

ż

enie górnego-lewego rogu,

get.../setSize

– podaje/ustawia rozmiar w pikselach,

contains

– sprawdza czy podany punkt zawiera si

ę

w polu

komponentu.



background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

9 / 26

Kontenery

Kontenery

to komponenty, które mog

ą

zawiera

ć

inne komponenty (w tym inne

kontenery. Podstawowe metody (oprócz odziedziczonych z klasy

Component

) to:

add(<nazwa komponentu>)

dodawanie komponentu,

remove(<nazwa komponentu>)

usuni

ę

cie komponentu,

A ponadto:

getCopmonentCount()

zwraca liczb

ę

komponentów,

getComponent(int n)

zwraca odniesienie na n-ty komponent,

getComponents()

zwraca tablic

ę

wszystkich komponentów,

setLayout(...)

ustawia rozmieszczenie komponentów.

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

10 / 26

Okna

Okna to kontenery najwy

ż

szego poziomu, za pomoc

ą

których aplikacja komunikuje

si

ę

z u

ż

ytkownikiem.



Najwa

ż

niejsze komponenty, które tworz

ą

okna to:

JFrame

,

JDialog

,

JWindow

,

JApplet

,

JInternalFrame

.



Główne okno aplikacji jest obiektem klasy

JFrame

, np:

JFrame okno = JFrame (”Okno główne”);



Ka

ż

de okno, mimo

ż

e samo jest kontenerem, zawiera kontenery wewn

ę

trzne.

Do manipulowania komponentami w oknie słu

ż

y kontener

contentPane

. Dost

ę

p

do tego kontenera umo

ż

liwia metoda

getContentPane()

, np:

Container cp = okno.getContentPane();



Kolejne komponenty umieszcza si

ę

w kontenerze przy u

ż

yciu metody

add(...)

.

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

11 / 26

Obiekt klasy JFrame – przykład

import javax.swing.*;

public class ProstaAplikacja1 extends JFrame
{
public ProstaAplikacja1()

{ super("Ramka 1");

setSize(250,50);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

setVisible(true);
}

public static void main(String []args)
{ new ProstaAplikacja1();

}

}

Wywołania konstruktora klasy

bazowej

i przekazanie tytułu okna

Ustawienia rozmiaru okna ramki

Obsługa zamykania okna

Wy

ś

wietlenie ramki na ekranie

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

12 / 26

Operacja zamkni

ę

cia okna

Ramka posiada przyciski

Minimalizuj,

Maksymalizuj

oraz

Zamknij

zlokalizowane na

pasku tytułu. W przypadku Javy domy

ś

lne zamkniecie ramki nie powoduje zamkni

ę

cia

aplikacji. Aby to zmieni

ć

, nale

ż

y wywoła

ć

metod

ę

setDefaultCloseOperation()

zawieraj

ą

c

ą

jeden z czterech parametrów wywołania:



EXIT_ON_CLOSE

– zamyka aplikacje po zamkni

ę

ciu ramki



DISPOSE_ON_CLOSE

– zamyka ramk

ę

, usuwa obiekt reprezentuj

ą

cy ramk

ę

,

ale pozostawia pracuj

ą

c

ą

aplikacje,



DO_NOTHING_ON_CLOSE

– pozostawia ramk

ę

otwarta i kontynuuje prace aplikacji



HIDE_ON_CLOSE

– zamyka ramk

ę

pozostawiaj

ą

c pracuj

ą

c

ą

aplikacje.

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

13 / 26

Umieszczanie komponentów w oknie

import java.awt.*;
import javax.swing.*;

public class ProstaAplikacja2 extends JFrame
{
public ProstaAplikacja2()
{ super("Ramka 2");
setSize(250,70);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p = new JPanel();
p.add( new JLabel("Etykieta") );
p.add( new JButton("Przycisk") );
p.add( new JTextField("Pole textowe"));

Container cp = getContentPane();
cp.add(p);

setVisible(true);
}

public static void main(String []args)
{ new ProstaAplikacja2();
}
}

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

14 / 26

Rozmieszczanie komponentów w kontenerze

Z ka

ż

dym kontenerem jest skojarzony tzw.

zarz

ą

dca rozkładu

, który okre

ś

la

rozmiary i poło

ż

enie komponentów. Zarz

ą

dca rozkładu jest obiektem klasy

implementuj

ą

cej interfejs

LayoutManager

. Ustalenie zarz

ą

dcy rozkładu dla kontenera

odbywa si

ę

za pomoc

ą

metody

setLayout(...)

np.:

FlowLayout flow = new FlowLayot();

Frame f = new Frme();

f.setLayout(flow);

U

ż

ycie zarz

ą

dcy rozkładu pozwala unika

ć

konieczno

ś

ci oprogramowania zmian

rozmiarów

i

poło

ż

enia

komponentów

przy

zmianie

rozmiarów

kontenera.

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

15 / 26

Zarz

ą

dca rozkładu – przykłady

Ustalenie rozkładu realizowane jest przez klasy implementuj

ą

ce interfejs

LayoutManager

(zarz

ą

dca rozkładu):



FlowLayout

– komponenty uło

ż

one s

ą

wierszami (jak litery tekstu);

rozmiary komponentów nie zmieniaj

ą

si

ę

.



BorderLayout

– komponenty uło

ż

one s

ą

„geograficznie”:

o

„North

”, „South” (komponenty zmieniaj

ą

wymiary w poziomie),

o

East

”, „West” (komponenty zmieniaj

ą

wymiary w pionie),

o

Center

” (komponent zmienia oba wymiary),



GridLayout

– tablica n*m komponentów; wszystkie komponenty

maj

ą

taki sam rozmiar zmieniaj

ą

cy si

ę

wraz z kontenerem.

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

16 / 26

Zarz

ą

dca rozkładu – przykłady c.d.

import java.awt.*;
import javax.swing.*;

public class ProstaAplikacja3 extends JFrame
{
public ProstaAplikacja3()
{ super("Ramka 2");
setSize(300,120);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p = new JPanel();
p.setLayout(new GridLayout(2, 3, 10, 10));
p.add( new JLabel("Etykieta 1") );
p.add( new JButton("Przycisk 1") );
p.add( new JTextField("Pole textowe 1"));

p.add( new JLabel("Etykieta 2") );
p.add( new JButton("Przycisk 2") );
p.add( new JTextField("Pole textowe 2"));

Container cp = getContentPane();
cp.add(p);

setVisible(true);
}

public static void main(String []args)
{ new ProstaAplikacja3();
}
}

Dodawanie drugiego rz

ę

du

komponentów

Dodawanie pierwszego
rz

ę

du komponentów

Dodawanie zarz

ą

dcy rozmie-

szczenia w postaci
szachownicy 2 x 3.

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

17 / 26

Zdarzenia

Graficzny interfejs u

ż

ytkownika oprócz samego wy

ś

wietlania komponentów powinien

reagowa

ć

na zdarzenia pochodz

ą

ce od u

ż

ytkownika.

Ź

ródłami i słuchaczami zdarze

ń

s

ą

obiekty:



zdarzenie

(event) - obiekt "nios

ą

cy" informacj

ę

o stanie

ź

ródła,



ź

ródło

(source) - obiekt, który generuje zdarzenia,



słuchacz

(listener) -obiekt powiadamiany o wyst

ą

pieniu zdarzenia.

Wi

ę

kszo

ść

zdarze

ń

jest generowana przez:



mysz,



klawiatur

ę

,



elementy interfejsu graficznego.

Obsługa zdarze

ń

jest zawarta w pakiecie

java.awt.event

.

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

18 / 26

Hierarcha zdarze

ń

Object

EventObject

AWTEvent

AdjustmentEven

ActionEvent

ItemEvent

TextEvent

ComponentEvent

ContainerEvent

WindowEvent

FocusEvent

InputEvent

MouseEvent

KeyEvent

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

19 / 26

Tworzenie słuchacza

Słuchacz

- to klasa, która mo

ż

e obsługiwa

ć

zdarzenie. Ka

ż

da klasa, która

implementuje interfejs nasłuchu staje si

ę

Słuchaczem, np.:

public class MojaKlasa implements ActionListener {

// ...

}

Ka

ż

da klasa implementuj

ą

ca interfejs musi zdefiniowa

ć

metody interfejsu.

Dla interfejsu

ActionListener

jest to:

public void actionPerformed(ActionEvent e) {

// instrukcje obsługuj

ą

ce zdarzenie

}

Klasa-słuchacz mo

ż

e te

ż

implementowa

ć

wi

ę

ksz

ą

liczb

ę

interfejsów nasłuchu

(okre

ś

lamy w ten sposób zestaw obsługiwanych zdarze

ń

).

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

20 / 26

Interfejsy nasłuchu

EventListener

WindowListener

ActionListener

MouseListener

MouseMotionListener

MenuListener

KeyListener

FocusListener

Action

MouseInputListener

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

21 / 26

Interfejsy nasłuchu



ActionListener

– obsługuje zdarzenia generowane przez u

ż

ytkownika na

rzecz danego składnika interfejsu (Np. klikniecie przycisku)



AdjustmentListener

– obsługuje zdarzenie jako zmian

ę

stanu składnika

(np. przesuwanie suwaka w polu tekstowym)



FocusListener

– obsługuje zdarzenie od przej

ś

cia składnika w stan nieaktywny



ItemListener

– obsługuje zdarzenie od np. zaznaczenia pola wyboru



KeyListener

– obsługuje zdarzenie np. od wpisywania tekstu z klawiatury



MouseListener

– obsługuje zdarzenie od naci

ś

ni

ę

cia klawiszy myszy



MouseMotionListener

– obsługuje zdarzenie od przesuwania wska

ź

nika

myszy nad danym składnikiem



WindowListener

– obsługuje zdarzenie od okna np. minimalizacja,

maksymalizacja, przesuniecie, zamkniecie

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

22 / 26

Przył

ą

czanie słuchacza

Wszystkie komponenty Swing umo

ż

liwiaj

ą

przył

ą

czanie/odł

ą

czanie okre

ś

lonych

typów Słuchaczy. Słu

żą

do tego metody:

add

XXX

Listener()

oraz

remove

XXX

Listener()

,

gdzie

XXX

jest typem słuchacza.

Np.:

zdarzenie

ActionEvent

mo

ż

e

by

ć

obsłu

ż

one

przez

Słuchacza

implementuj

ą

cego interfejs

ActionListener

; Słuchacz taki mo

ż

e by

ć

przył

ą

czony do

komponentów,

które

maj

ą

dost

ę

p

do

metody

addActionListener()

.

S

ą

to:

Button

,

List

,

TextField

,

MenuItem

oraz klasy pochodne.

Przykład:

Słuchacz słuchacz = new Słuchacz();

przyciskOK.addActionListener(słuchacz);

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

23 / 26

Obsługa zdarze

ń

od przycisków - przykład

Po klikni

ę

ciu w przycisk pole tekstowe ma zosta

ć

wypełnione tekstem.

etykiety

JLabel

pola tekstowe

JTextField

przyciski

JButton

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

24 / 26

Obsługa zdarze

ń

od przycisków – przykład cd.

import javax.swing.*;
import java.util.*;
import java.io.*;
import java.lang.*;
import java.awt.event.*;



class Dane
{ String opinia1,opinia2,opinia3;
Dane()
{ opinia1=opinia2=opinia3=null;
}
}

public class ProstaAplikacja4 extends JFrame implements ActionListener
{
JButton weopinia1 = new JButton("Obsluga komputera");
JButton weopinia2 = new JButton("Jezyk angielski");

JButton weopinia3 = new JButton("Jezyk niemiecki");

JTextField wyopinia1=new JTextField(30);
JTextField wyopinia2=new JTextField(30);

JTextField wyopinia3=new JTextField(30);

Dane dana = new Dane();

Klasa do przechowywania
tekstu wyra

ż

anych opinii

klasa implementuje
interfejs słuchacza
zdarze

ń

ActionListener

przyciski

JButton

oraz

pola tekstowe

JTextField

– aktywne elementy

interfejsu u

ż

ytkownika

obiekt pami

ę

taj

ą

cy

wprowadzone dane

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

25 / 26

Obsługa zdarze

ń

od przycisków – przykład cd.

public ProstaAplikacja4()
{ super("Ramka 4");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(450,160);
JPanel panel=new JPanel();

weopinia1.addActionListener(this);
weopinia2.addActionListener(this);
weopinia3.addActionListener(this);

panel.add(weopinia1);
panel.add(weopinia2);
panel.add(weopinia3);

JLabel eopinia1= new JLabel(" opinia 1",SwingConstants.RIGHT);
panel.add(eopinia1);
panel.add(wyopinia1);
JLabel eopinia2= new JLabel(" opinia 2",SwingConstants.RIGHT);
panel.add(eopinia2);
panel.add(wyopinia2);
JLabel eopinia3= new JLabel(" opinia 3",SwingConstants.RIGHT);
panel.add(eopinia3);
panel.add(wyopinia3);

setContentPane(panel);
show();
}

Przył

ą

czenie słuchacza

zdarze

ń

generowanych

przez przyciski

Umieszczenie

wszystkich

komponentów

w kontenerze

panel

Umieszczenie kontenera

panel

w

głównym oknie aplikacji oraz

wy

ś

wietlenie głównego okna na ekranie

background image

Programowanie graficznych interfejsów u

ż

ytkownika Autor: Paweł Rogali

ń

ski – Instytut Informatyki, Automatyki i Robotyki PWr

26 / 26

Obsługa zdarze

ń

od przycisków – przykład cd.


public void actionPerformed (ActionEvent evt)
{

Object zrodlo = evt.getSource();


if (zrodlo==weopinia1)
dana.opinia1= new String("Znajomosc obslugi komputera");
else if (zrodlo==weopinia2)
dana.opinia2= new String("Znajomosc jezyka angielskiego");
else if (zrodlo==weopinia3)
dana.opinia3= new String("Znajomosc jezyka niemieckiego");

wyopinia1.setText(dana.opinia1);
wyopinia2.setText(dana.opinia2);
wyopinia3.setText(dana.opinia3);

repaint();
}


public static void main(String[] arg) throws Exception
{ new ProstaAplikacja4();
}
}

Metoda z interfejsu słuchacza

ActionListener

,

która obsługuje zdarzenia

ActionEvent

generowane przez przyciski

Odczytanie

ź

ródła wygenerowanego zdarzenia

utworzenie

tekstu opinii

po

naci

ś

ni

ę

ciu

przycisku

wpisanie tekstów opinii

do pól tekstowych

odrysowanie wygl

ą

du

wszystkich komponentów po

modyfikacji danych

utworzenie głównego okna aplikacji


Wyszukiwarka

Podobne podstrony:
Programowanie GUI id 395885 Nieznany
Program umiarkowany id 395519 Nieznany
gui id 197663 Nieznany
Narodowy Program Zdrowia1 id 31 Nieznany
Narodowy Program Zdrowia id 314 Nieznany
Program cw3 id 395618 Nieznany
Program zjazdu id 395614 Nieznany
Program cw2 id 395617 Nieznany
Program cw5 id 395619 Nieznany
gk 04 gui id 191748 Nieznany
Program cz1 id 395054 Nieznany
Program cz10 id 395055 Nieznany
program zajec id 395592 Nieznany
Programowanie Usb C id 396388 Nieznany
Program wykladu id 395571 Nieznany
Program zajec 2 id 395593 Nieznany
program arteterapii 3 id 394997 Nieznany
program pedagogika id 395372 Nieznany
Program studiow 2 id 395472 Nieznany

więcej podobnych podstron