Microsoft PowerPoint - JavaP7_2018

Слични документи
Primenjeno programiranje - vezbe GUI i baze podataka

Programski jezik JAVA PREDAVANJE

Slide 1

VEŽBA 5: KLASE I OBJEKTI U C# Cilj ove vežbe je upoznavanje sa osnovama rada sa klasama i objektima u programskom jeziku C#. Pored toga, bide demonstr

Tutoring System for Distance Learning of Java Programming Language

PowerPoint Presentation

ZADACI ZA VEŽBU 1. Realizovati konzolnu aplikaciju koja će računati površinu kvadrata, pravougaonika ili trougla. 2. Preko konzole se unosi ocena od 1

Tutoring System for Distance Learning of Java Programming Language

UVOD - OD JAVE DO C# ELEMENTARNE RAZLIKE Veliki broj Java/C# razlika su uglavnom preimenovane ključne reči i razlike u konvencijama imenovanja. Neke o

PowerPoint Presentation

Domaći zadatak - GUI (rok za sve grupe je ) Napraviti repozitorijum na GitHub-u koji se zove MenjacnicaGUI i postaviti Eclipse projekat menj

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

4. Веза између табела практичан рад 1. Повежите табеле Proizvodi и Proizvođači у бази података Prodavnica.accdb везом типа 1:N. 2. Креирајте табелу St

Zadatak 011 Razmotrite sljedeći primjer. package hr.fer.oopj.primjeri.p011; public class Main { } public static void main(string[] args) { obrada(2.71

Primenjeno programiranje - Vežbe

Slide 1

Tutoring System for Distance Learning of Java Programming Language

Класе комбинација презентације (Хортона) и к о бајаги скрипте (Ово је прича коју врло радо причам) нови тип података: дефинишу могуће вредности подата

ПРОГРАМИ ЗА ПРАВЉЕЊЕ ПРЕЗЕНТАЦИЈА

СТАРТ - СТОП ПАРКИНГ СИСТЕМ КОРИСНИЧКО УПУТСТВО страна 1 од 12

PowerPoint Presentation

Funkcije predavač: Nadežda Jakšić

ednostavno i veoma kvalitetno mozete film koji ste downloadovali sa interneta u avi formatu pretvoriti u dvd format i kreirati pocetni meni sa sekvenc

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Microsoft PowerPoint - 12-Funkcije_1.ppt [Compatibility Mode]

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Projektna dokumentacija Boostowski - mobile

PowerPoint Presentation

Postoji jedan mali meni dragi alat koji vam omogucuje zastitu od kopiranja,pregledavanja,umnozavanja,pravljenj a duplikata...svih vasih medijskih dato

Slide 1

Microsoft PowerPoint - JavaP9_2019

Često postavljana pitanja u programu OBRT 1. Kako napraviti uplatu u knjizi tražbina i obveza? 2. Kako odabrati mapu/disk za pohranu podataka? 3. Kako

Tutoring System for Distance Learning of Java Programming Language

PowerPoint Presentation

Laboratorija za termičku obradu Inženjerstvo površina Kratko uputstvo za obradu i analizu profila u programskom paketu SPIP Programski paket SPIP preu

Funkcije predavač: Nadežda Jakšić

Sveucilište u Zagrebu

Упутство за пријављивање испита путем интернета Да би студент могао да пријави испит путем интернета мора прво да се пријави. Пријављивање се врши у п

Računarski praktikum I - Vježbe 09 - this, static

CARNET Helpdesk - Podrška obrazovnom sustavu e-dnevnik upute za nadzor razrednih knjiga tel: fax: mail:

UPUTSTVO ZA PODEŠAVANJE MOBILNIH UREĐAJA ZA MMS

Uvod u računarstvo 2+2

Microsoft Word - Uputstvo za koristenje aplikacije GIPKO

Kada pokrenete Windows 8 koristeci normalan nacin, nekoliko aplikacija i usluga automatski ce se i pokrenuti u pozadini. Ti programi ukljucuju i drajv

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

Paper Title (use style: paper title)

Korisnicki nalog je skup informacija i postavki koje koristite za interakciju sa racunarom i prilagodite Windows da radi onako kako vi zelite. Sa kori

SELECT statement basic form

Upute za korištenje EasyChair konferencijskog sustava HRO CIGRE 2019 Prijava referata Ako ste već koristili EasyChair na 13. Savjetovanju ili prije ta

Mozete bez problema uploadovati fase fajlove na Youtube sjt bez da idete na njega.taj postupak mozete jednostavno uraditi jednim malim alatom koga ima

Ovo vazi samo za preglednik Mozilla Firefox Verovatno mnogi koriste Youtube stranicu za gledanje spotova,skidanje pesama,spotova...pokusacu da ukratko

Upute - JOPPD kreiranje obrasca

INTEGRIRANI KNJIŽNIČNI SUSTAV Sustav za podršku Upute za instalaciju: Aleph v22 ZAG

Microsoft Word - Tehnicka uputstva lica doc

РЕ-АКТИВ ДОО Франклин Рузвелт 43А, 1000 Скопље, Македонија Тел.: Факс: МБ: ПИБ: МК

Uvod u računarstvo 2+2

Upute za instaliranje WordPressa 1.KORAK Da biste instalirali Wordpress, najprije morate preuzeti najnoviju verziju programa s web stranice WordPressa

_Outlook

User's Manual

Универзитет у Нишу Електронски факултет Катедра за теоријску електротехнику Кратко упутство за коришћење програмског пакета FEMM 4.2 за израду вежби и

Smjernice za korištenje sustava online prijava Ukoliko imate pristupno korisničko ime i lozinku ili ste navedeno dobili nakon zahtjeva za otvaranje no

3.Kontrlne (upravlja~ke) strukture u Javi

PRONALAZENJE I PROVERA PREMIUM COOKIES POMOCU COOKIES CHECKERA Takodje mozete jednostavno pronalaziti zeljene premijum kalacice i proveravati validnos

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Upustvo za korištenje novog SUPER TV interfejsa na Amino 139 STB-ovima

УПУТСТВО ЗА КОРИСНИКА Приступ локацији часописа Српски архив за целокупно лекарство добија се преко internet adrese: Након

Inženjering informacionih sistema

GetDeb je odlican server za Ubuntu softvere i moze vam pruziti instalaciju raznih paketa i aplikacija za vas Linux Ubuntu. Pomocu njega mozemo dobiti

Logicko projektovanje racunarskih sistema I

NIAS Projekt e-građani KORISNIČKA UPUTA za aplikaciju NIAS Verzija 1.1 Zagreb, srpanj 2014.

Recuva CERT.hr-PUBDOC

Datum: 20

Ministarstvo poljoprivrede Portal gospodarskog ribarstva Registracija prvih kupaca Uputa za korisnike

УПУТСТВО ЗА КОРИСНИКА Приступ локацији часописа Српски архив за целокупно лекарство добија се преко internet adrese: Након

Jednostavno mozete napraviti karaoka liric fajl za vas karaoka player naprimer KaraFun...Za taj postupak potreban vam je jedan alat koji imate na adre

Startovanje Androida u Windowsu Jednostavno ako zelite mozete instalirati operativni sistem Android u okviru samog Windowsa (to se takodje moze uradit

PowerPoint Presentation

Microsoft Word - Uputstvo za upotrebu studentskih servisa.doc

Lekcija 6 Prikaz podataka na graficima. Upis u fajl. 1. Cilj vežbe Cilj vežbe je da studente upozna sa: načinima prikaza podataka na različitim grafič

KREIRANJE TORRENTA Ako zelite da kreirate torrent fajl od nekog fajla ili foldera u vasem racunaru a kasnije podeliti sa drugim korisnicima i uploadov

KONFIGURACIJA MODEMA THOMPSON SpeedTouch 500 Series (530/530i/510/510i)

Dijagrami sekvenci

Uputstvo za korištenje Moja webtv Smart TV aplikacije Moja webtv aplikacija dostupna je za korištenje putem Web Browsera, na Play Store-u (za mobilne

Upute-podesavanj -accounta

Microsoft Word - IQ.doc

VALIDNOST CERTIFIKATA ZA PRISTUP INTERNET APLIKACIJAMA POREZNE UPRAVE FEDERACIJE BOSNE I HERCEGOVINE (npis I ejs)

Упутство за коришћење АМРЕС FileSender услуге

Postoji jedan mali alat pomocu koga mozete bez ikakvih problema i vrlo jednostavno downloadovati gotovo sve windows updejte,za naravno sve windows ope

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

NACIONALNI REGISTAR IZVORA ZAGAĐIVANJA UPUTSTVO ZA KORIŠĆENJE INFORMACIONOG SISTEMA NACIONALNOG REGISTRA IZVORA ZAGAĐIVANJA Beograd, 2014.

Microsoft PowerPoint - Datoteke [Compatibility Mode]

PROCES KUPNJE ULAZNICE NA PORTALU ULAZNICE.HR Početak kupovine... 2 Plaćanje Mastercard karticom... 5 Plaćanje Maestro karticom... 8 Plaćanje American

Ashampoo Burning Studio - instalacija i aktivacija

Programski jezik C

Kontrola korisnickih racuna (UAC) pomaze tako sto sprecava potencijalno stetne programe da izvrse promene u vasem racunaru i obavestava vas pre izvrse

СТАРТ - СТОП АПЛИКАЦИЈА - КОРИСНИЧКО УПУТСТВО

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Транскрипт:

Programski jezik JAVA PREDAVANJE 7 2019 www.etf.ac.me

Window Events Ako želimo učiniti nešto složenije od samog prekidanja programa kada korisnik zatvara prozor onda moramo reagovati na događaje koje prozor generiše. Kada na primjer zatvaramo prozor, JFrame generiše WindowEvent. Ako želimo da reagujemo na taj događaj trebamo da registrujemo WindowListener. Interfejs WindowListener izgleda ovako: 1 package java.awt.event; 2 3 import java.util.eventlistener; 4 5 public interface WindowListener extends EventListener 6 public void windowopened(windowevent e); 7 public void windowclosing(windowevent e); 8 public void windowclosed(windowevent e); 9 public void windowiconified(windowevent e); 10 public void windowdeiconified(windowevent e); 11 public void windowactivated(windowevent e); 12 public void windowdeactivated(windowevent e); 13 2

Window Events Tako bismo u klasi (npr. SmartFrame) koja proširuje JFrame imali: class SmartFrame extends JFrame public SmartFrame() settitle("prazan prozor!?"); setsize(300,200); WindowListener wl = new Terminator(); addwindowlistener(wl); Naš se WindowListener ovdje naziva Terminator. Prilikom zatvaranja prozora ponuditi ćemo korisniku confirmation dialog, prozor u kojem očekujemo da potvrdi svoju odluku klikom na OK dugme. 3

Window Events Pri tome koristimo statičke metode klase javax.swing.joptionpane. Kod u klasi Terminator je sljedeći: class Terminator implements WindowListener public void windowopened(windowevent e) public void windowclosing(windowevent e) int i=joptionpane.showconfirmdialog(null, "Zatvoriti ili ne zatvoriti???", "Exit", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if(i == JOptionPane.OK_OPTION) System.exit(0); public void windowclosed(windowevent e) public void windowiconified(windowevent e) public void windowdeiconified(windowevent e) public void windowactivated(windowevent e) public void windowdeactivated(windowevent e) Uočimo ovdje da smo morali implementirati sve metode iz interfejsa WindowListener premda nam je bila potrebna samo jedna metoda. Sve su druge implementirane trivijalno. Da bi se to izbjeglo, Java nudi Adapter klase pridružene interfejsima s više metoda. Takva adapter klasa implementira na trivijalan način (dakle, ne rade ništa) sve metode iz interfejsa pa korisnik treba umjesto implementacije interfejsa proširiti pripadnu adapter klasu i preraditi samo onu metodu koja ga zanima. U slučaju WindowListener pripadna adapter klasa se zove WindowAdapter.

Window Events import java.awt.*; import java.awt.event.*; import javax.swing.*; public class TestWindowListener public static void main(string[] args) SmartFrame frame = new SmartFrame(); frame.setdefaultcloseoperation(jframe.do_nothing_on_close ); frame.setvisible(true); class SmartFrame extends JFrame public SmartFrame() settitle("prazan prozor!?"); setsize(300,200); WindowListener wl = new Terminator(); addwindowlistener(wl); class Terminator extends WindowAdapter public void windowclosing(windowevent e) int i=joptionpane.showconfirmdialog(null, "Zatvoriti ili ne zatvoriti???", "Exit", JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE); if(i == JOptionPane.OK_OPTION) System.exit(0); 5

JOptionPane U prethodnom primjeru smo koristili klasu JOptionPane i njenu statičku metodu showconfirmdialog. Ova nam klasa nudi četiri takve statičke metode koje otvaraju jednostavne prozore za komunikaciju sa korisnikom. To su: showmessagedialog -- prikaži poruku i čekaj da korisnik klikne OK showconfirmdialog -- prikaži poruku i čekaj odobrenje (OK/Cancel) showoptiondialog -- prikaži poruku i čekaj da korisnik selektuje jednu od ponuđenih opcija showinputdialog -- prikaži poruku i čekaj korisnikov unos Preciznije ćemo opisati showmessagedialog i showconfirmdialog. Metode su preopterećene pa ćemo pokazati samo dvije tipične: public static void showmessagedialog(component parentcomponent, Object message, String title, int messagetype) public static int showconfirmdialog(component parentcomponent, Object message, String title, int optiontype, int messagetype) Za prvi argument se može uvijek staviti null. Treći argument title je naslov koji dolazi na prozor.

JOptionPane Ovi se prozori sastoje od ikone, poruke i jednog ili više dugmadi. Ikona zavisi od tipa poruke (argument messagetype) koji može biti: JOptionPane.ERROR_MESSAGE JOptionPane.INFORMATION_MESSAGE JOptionPane.WARNING_MESSAGE JOptionPane.QUESTION_MESSAGE JOptionPane.PLAIN_MESSAGE U slučaju PLAIN_MESSAGE nema ikone. Poruka (argument message) zadaje se najčešće kao String, ali može biti i ikona ili čak niz objekata. Zbog toga se zadaje kao promjenljiva tipa Object. Broj dugmadi u prozoru zavisi od promjenljive koja se zove optiontype i može imati ove vrijednosti: JOptionPane.DEFAULT_OPTION JOptionPane.YES_NO_OPTION JOptionPane.YES_NO_CANCEL_OPTION JOptionPane.OK_CANCEL_OPTION

JOptionPane Značenje svake pojedine opcije dato je imenom. MessageDialog ima samo OK dugme, pa ovog argumenta u showmessagedialog nema. Isto tako, showmessagedialog ne vraća ništa, dok showconfirmdialog vraća cijeli broj koji označava izabranu opciju. Vrijednosti su ponovo date simboličkim imenima: JOptionPane.YES_OPTION JOptionPane.NO_OPTION JOptionPane.CANCEL_OPTION JOptionPane.OK_OPTION JOptionPane.CLOSED_OPTION Zadnja vrijednost se vraća onda kada korisnik zatvori prozor bez konfirmacije.

Događaji koji dolaze od miša Događaji vezani uz miša distribuiraju se osluškivačima koji su podijeljeni u tri interfejsa: MouseListener, MouseMotionListener i MouseWheelListener. Razlog je uglavnom efikasnost jer događaja vezanih za kretanje miša ima jako mnogo i većina aplikacija ih ne želi slušati. Interfejs MouseListener: Kada se pritisne neka od tipki na mišu poziva se metoda mousepressed; kada se tipka otpusti zove se mousereleased i zatim mouseclicked. Pomoću MouseEvent objekata koji ove metode dobijaju moguće je naći koordinate događaja pomoću metoda: public int getx() public int gety() public Point getpoint() Unutar metode mouseclicked možemo koristiti metodu public int getclickcount() koja se takodje nalazi u MouseEvent klasi koja daje broj klikanja. 9

Nastavak... Ponekad se koriste kombinacije pritiska na tipku miša i neku od specijalnih tipki (Ctrl, Alt Shift). U tom slučaju treba koristiti metodu public int getmodifiersex() iz klase InputEvent, koja je nadklasa klase MouseEvent. Ona će vratiti niz bita koji treba testirati u odnosu na maske definisane u InputEvent klasi. Interfejs MouseMotionListener definiše dvije metode: public void mousedragged(mouseevent e) public void mousemoved(mouseevent e) Prva se odnosi na situaciju kada se miš pomjera sa pritisnutom tipkom, a druga na kretanje bez pritisnute tipke (vidi klasu java.awt.cursor). 10

Nastavak... Procesiranje događaja koji dolaze od miša može se vidjeti na primjeru koji se nalazi na sljedećem slajdu. Napisan je program koji otvara prozor u kome se jednim klikom miša iscrtava pravougaonik na onom mjestu na kome se klik dogodio. Dva klika na nekom pravougaoniku isti brišu. Pored toga, prelaskom miša preko pravougaonika mijenja se izgled kursora i ako na pravougaoniku pritisnemo tipku miša, a miš nastavimo povlačiti, pravougaonik će se kretati za mišem (dragging). 11

import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import javax.swing.*; import java.util.*; // ArrayList Program public class TestMouseListener public static void main(string[] args) MouseFrame mf = new MouseFrame(); mf.setdefaultcloseoperation(jframe.exit_on_close); mf.setvisible(true); class MouseFrame extends JFrame public MouseFrame() settitle("mouseframe"); setsize(300,200); MousePanel mp = new MousePanel(); Container contentpane = getcontentpane(); contentpane.add(mp); class MousePanel extends JPanel // Privatni podaci private static final int DUZINA = 10; // duzina stranice kvadrata private ArrayList kvadrati; // lista kvadrata private Rectangle2D trenutni; // aktuelni kvadrat public MousePanel() kvadrati = new ArrayList(); trenutni = null; addmouselistener(new MouseHandler()); addmousemotionlistener(new MouseMotionHandler()); 12

// Iscrtavanje panela public void paintcomponent(graphics g) super.paintcomponent(g); Graphics2D g2 = (Graphics2D) g; for(int i=0; i<kvadrati.size(); ++i) g2.draw((rectangle2d) kvadrati.get(i)); // Rutine za manipolaciju s listom kvadrata: add, find, remove // Metode se jednostavno implemetiraju pomoću metoda klase ArrayList // Dodaj novi kvadrat s centrom u tacki p. public void add(point2d p) double x = p.getx(); double y = p.gety(); trenutni = new Rectangle2D.Double(x-DUZINA/2, y-duzina/2, DUZINA, DUZINA); // Koristimo metodu add iz ArrayList kvadrati.add(trenutni); repaint(); // Pronađi element u listi koji sadrži tačku p. Vrati null ako takvog nema. public Rectangle2D find(point2d p) // Sav posao odrađuje metod contains iz Rectangle2D koja ispituje je li tačka unutar pravougaonika. for(int i=0; i<kvadrati.size(); ++i) Rectangle2D rec=(rectangle2d) kvadrati.get(i); if(rec.contains(p)) return (Rectangle2D) kvadrati.get(i); return null; 13

// Odstrani element iz liste public void remove(rectangle2d r) if(r == null) return; if(r == trenutni) trenutni = null; kvadrati.remove(r); repaint(); // Rutine za procesiranje dogaðaja. Smještene su u dvije //unutrašnje klase. // Privatna unutrašnja klasa private class MouseHandler extends MouseAdapter // Čim pritisnemo tipku miša kreiramo novi kvadrat public void mousepressed(mouseevent e) // Da li se pritisak dogodio unutar nekog pravougaonik? trenutni = find(e.getpoint()); if(trenutni == null) // nije add(e.getpoint()); // dodaj novi pravougaonik // Ako kliknemo dvaput u kvadratu brišemo ga public void mouseclicked(mouseevent e) // Da li se pritisak dogodio unutar nekog kvadrata? trenutni = find(e.getpoint()); if(trenutni!= null && e.getclickcount() >=2 ) remove(trenutni); // briši kvadrat 14

// Privatna unutrašnja klasa private class MouseMotionHandler implements MouseMotionListener public void mousemoved(mouseevent e) // Ako se kretanje dešava unutar kvadrata promijeni kursor if(find(e.getpoint()) == null) setcursor(cursor.getdefaultcursor()); else setcursor(cursor.getpredefinedcursor(cursor.crosshair_cursor)); public void mousedragged(mouseevent e) // Čim se stisne tipka unutar nekog kvadrata // biće postavljen trenutni if(trenutni!= null) int x = e.getx(); int y = e.gety(); // Vučemo kvadrat trenutni.setframe(x-duzina/2, y-duzina/2, DUZINA, DUZINA); repaint();