SWING c.d. przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe.

Podobne dokumenty
SWING ZAGADNIENIA: wprowadzenie, kontenery i komponenty, LayoutManager, komponenty tekstowe. inne przydatne komponenty.

Aplikacja wielowątkowa prosty komunikator

Kontenery i komponenty graficzne

SWING ZAGADNIENIA: wprowadzenie, kontenery I komponenty, LayoutManager, komponenty tekstowe.

Aplikacja wielow tkowa prosty komunikator

JAVA. Strumienie wejścia i wyjścia. Pliki - zapis i odczyt

Jakarta POI. POIFS obsługa dokumentów OLE 2, HSSF dokumenty w formacie Excel'a, HWPF proste dokumenty w formacie Word 97,

KLASY, INTERFEJSY, ITP

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Programowanie obiektowe

Java - interfejs graficzny

Materiał pomocniczy do kursu Podstawy programowania Autor: Grzegorz Góralski ggoralski.com

Języki i metody programowania Java Obsługa zdarzeń - przykłady

Swing ćwiczenia 2 opis

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

WSPÓŁBIEŻNOŚĆ. MATERIAŁY:

Java. Wykład. Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ

Tworzenie elementów graficznych

Programowanie obiektowe

Zaawansowane aplikacje WWW - laboratorium

Dokumentacja do API Javy.

Programowanie graficznych interfejsów użytkownika

Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy. Tworzenie łącz w apletach

Bezpieczne uruchamianie apletów wg

Aplikacje RMI Lab4

Podstawy i języki programowania

Ćwiczenia 9 - Swing - część 1

Java niezbędnik programisty spotkanie nr 12. Graficzny interfejs użytkownika

Java. Programowanie Obiektowe Mateusz Cicheński

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Aplikacje RMI. Budowa aplikacji rozproszonych. Część 2.

Programowanie zdarzeniowe

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Programy typu klient serwer. Programowanie w środowisku rozproszonym. Wykład 5.

1. Co można powiedzieć o poniższym kodzie? public interface I { void m1() {}; static public void m2() {}; void abstract m3();

Współbieżność i równoległość w środowiskach obiektowych. Krzysztof Banaś Obliczenia równoległe 1

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Systemy Rozproszone - Ćwiczenie 6

JAVA I SIECI. MATERIAŁY:

1. Co można powiedzieć o poniższym kodzie?

JAVA W SUPER EXPRESOWEJ PIGUŁCE

1 Klasa File. 2 Writer. Programowanie w j zyku Java - Adam Krechowicz. Klasa File zapewnia podstawowe operacje na plikach

Java: interfejsy i klasy wewnętrzne

Programowanie w Javie Wykład 6 Okienka w Javie (AWT)

Programowanie i projektowanie obiektowe

Programowanie obiektowe

Kurs programowania. Wykład 4. Wojciech Macyna. 23 marca 2016

Programowanie w języku Java

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Języki i metody programowania Java INF302W Wykład 2 (część 1)

Współbieżność w środowisku Java

Podstawy tworzenia aplikacji z wykorzystaniem języka Java ME ćwiczenia 2

SWING. dr Jarosław Skaruz

1 Atrybuty i metody klasowe

STRUMIENIE DANYCH, SERIALIZACJA OBIEKTÓW

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Instrukcja implementacji sterownika wirtualnego portu szeregowego dla systemu Android. Opracowanie: Elzab Soft sp. z o.o.

1. Co można powiedzieć o poniższym kodzie (zakładając, że znajduje się on w jednym pliku A.java)?

Aplikacje RMI

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie obiektowe

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

package pakieta; import pakietb.b; package pakietb; public class B { B(){} public class A { private B b; A(B b) { this.b = b; } }

Język JAVA podstawy. Wykład 6, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Wykład 4_1. Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy.

Programowanie obiektowe

Instrukcja 10 Laboratorium 13 Testy akceptacyjne z wykorzystaniem narzędzia FitNesse

Java Zadanie 1. Aby poprawnie uruchomić aplikację desktopową, należy zaimplementować główną metodę zapewniającą punkt wejścia do programu.

Tworzenie i wykorzystanie usług

Wykład 7: Pakiety i Interfejsy

Programowanie urządzeń mobilnych. dr inż. Andrzej Grosser na podstawie wykładu dr inż. Juliusza Mikody

Wielowątkowość. Programowanie w środowisku rozproszonym. Wykład 1.

Operatory. Składnia. Typy proste. Znaki specjalne

Programowane refleksyjne i serializacja

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Dawid Gierszewski Adam Hanasko

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Katedra Architektury Systemów Komputerowych Wydział Elektroniki, Telekomunikacji i Informatyki Politechniki Gdańskiej

Wprowadzenie do programowania współbieżnego. Grafika, Proste Animacje

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Wykład 4: Klasy i Metody

Przypomnienie o klasach i obiektach

Wykorzystywanie parsera DOM w programach Java i PL/SQL

Programowanie rozproszone w języku Java

Remote Method Invocation 17 listopada 2010

Aplikacje w Javie- wykład 11 Wątki-podstawy

Programowanie współbieżne Laboratorium nr 11

Wywoływanie metod zdalnych

Pętle while, for, do while, instrukcje break, continue, switch 1. Pętle

Podejście obiektowe do budowy systemów rozproszonych

akademia androida Service, BroadcastReceiver, ContentProvider część IV

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Java programowanie w sieci. java.net RMI

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Wykład 2: Podstawy Języka

Programowanie graficznego interfejsu użytkownika. Wykład 8. Maciej Wołoszyn 10 maja 2006

Ćwiczenie 1. Kolejki IBM Message Queue (MQ)

1. Co będzie wynikiem wykonania poniŝszych instrukcji? g2d.gettransform().scale(1, -1); g2d.gettransform().translate(4, -8); g2d.drawline(4, 0, 4, 4);

Transkrypt:

SWING c.d. ZAGADNIENIA: przydatne narzędzia: JFileChooser, JOptionPane. drag'n drop, menu kontekstowe. MATERIAŁY: http://docs.oracle.com/javase/tutorial/uiswing/dnd/ http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 1

JFileChooser http://docs.oracle.com/javase/tutorial/uiswing/components/flechooser.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 2

JFileChooser JFileChooser chooser = new JFileChooser(); // filtr plików FileNameExtensionFilter filter = new FileNameExtensionFilter( "Obrazy JPG i GIF", "jpg", "gif"); chooser.setfilefilter(filter); // wyświetlenie okienka int ret = chooser.showopendialog(parent); // Jesli wcisnieto ok lub open if(ret == JFileChooser.APPROVE_OPTION) { System.out.println("Wybrales plik: " + chooser.getselectedfile().getname()); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 3

JOptionPane http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 4

JOptionPane Object[] possibilities = {"ham", "spam", "yam"; String s = (String)JOptionPane.showInputDialog( frame, "Complete the sentence:\n" + "\"Green eggs and...\"", "Customized Dialog", JOptionPane.PLAIN_MESSAGE, icon, possibilities, // null "ham"); http://docs.oracle.com/javase/tutorial/uiswing/components/dialog.html#features http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 5

Drag and Drop Wiele komponentów standardowo obsługuje drag'n drop (a dokładniej drop). Jeśli źródłem danych ma być komponent Swing, to należy na nim wykonać metodę: setdragenabled(true). Drag'n Drop funkcjonalnie jest równoważne kopiowaniu przez schowek (ctrl-c, ctrl-v). Aby całkowicie kontrolować ten proces należy poznać kilka klas odpowiedzialnych za jego realizację. http://docs.oracle.com/javase/tutorial/uiswing/dnd/index.html http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 6

Transferable Przenoszone dane są reprezentowane przez interfejs Transferable. Object gettransferdata(dataflavor flavor) - zwraca transferowany obiekt DataFlavor[] gettransferdataflavors() - zwraca wszystkie dostępne postacie przenoszonego obiektu, boolean isdataflavorsupported(dataflavor flavor) zwraca informację, czy obiekt jest dostępny w odpowiedniej postaci http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 7

DataFlavor Przenoszone obiekt jest zwykle dostępny w wielu postaciach. Przykładowo, zdjęcie może być reprezentowane przez zbiór pixeli (grafka), nazwę pliku, w którym jest zapisane, zbiór bajtów, czy też zakodowaną w formacie Base64 zawartość. W związku z tym, w zależności od tego, gdzie takie zdjęcie przenosimy (wklejamy) możemy zobaczyć je pod inną postacią. Te postacie są reprezentowane przez klasę DataFlavor. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 8

TransferHandler Obiekt, który zarządza procesem drag'n drop jest TransferHandler. Posiada on metody służące do eksportu danych: int getsourceactions(jcomponent c) { return COPY_OR_MOVE; Transferable createtransferable(jcomponent c) { return new StringSelection(c.getSelection()); void exportdone(jcomponent c, Transferable t, int action) { if (action == MOVE) { c.removeselection(); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 9

TransferHandler oraz importu: canimport(transferhandler.transfersupport) zwraca true jeśli komponent znajdujący się pod kursorem myszki akceptuje przenoszony obiekt importdata(transferhandler.transfersupport) metoda jest wywoływana po upuszczeniu (drop) obiektu. zwraca true jeśli import obiektu zakończył się powodzeniem. http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 10

PRZYKŁAD import java.awt.*; import java.awt.datatransfer.*; import java.awt.event.*; import java.io.*; import javax.swing.*; public class JDnDFrame extends JFrame { public JDnDFrame() { FileTransferHandler fth = new FileTransferHandler(); JTextArea ta = new JTextArea(); ta.settransferhandler(fth); ta.setpreferredsize(new Dimension(600, 400)); File[] fa = (new File(".")).listFiles(); JList<File> fl = new JList<File>(fa); fl.settransferhandler(fth); fl.setdragenabled(true); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 11

PRZYKŁAD JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, ta, fl); this.getcontentpane().add(sp); public static void createandshow() { JDnDFrame f = new JDnDFrame(); f.setdefaultcloseoperation(exit_on_close); f.pack(); f.setlocationrelativeto(null); f.setvisible(true); public static void main(string[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createandshow(); ); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 12

PRZYKŁAD private static class FileTranferable implements Transferable { public static DataFlavor fileflavor = new DataFlavor(File.class, "file"); // tutaj przechowujemy transferowany plik private File file; public FileTranferable(File f) { this.file = f; @Override public DataFlavor[] gettransferdataflavors() { // tylko jedna postać DataFlavor[] df = new DataFlavor[1]; df[0] = fileflavor; return df; http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 13

PRZYKŁAD @Override public boolean isdataflavorsupported(dataflavor flavor) { return (flavor == fileflavor); @Override public Object gettransferdata(dataflavor flavor) throws UnsupportedFlavorException, IOException { if (isdataflavorsupported(flavor)) return this.file; // nie obsługujemy innych postaci obiektu throw new UnsupportedFlavorException(flavor); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 14

PRZYKŁAD private static class FileTransferHandler extends TransferHandler implements ActionListener{ private JPopupMenu popup; // bez tej metody nie rozpocznie się eksport obiektu public int getsourceactions(jcomponent c) { return COPY_OR_MOVE; // tworzy obiekt Transferable zawierający przenoszony element protected Transferable createtransferable(jcomponent c) { Object obj = ((JList<File>) c).getselectedvalue(); return new FileTranferable((File) obj); // handler akceptuje wszystko. W praktyce to powinno być // zaimplementowane porządnie, ale tutaj takie zachowanie nie // będzie przeszkadzać public boolean canimport(transfersupport ts) { return true; http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 15

PRZYKŁAD private JTextArea destination; private File file; public boolean importdata(transfersupport ts) { // tutaj niepotrzebne, ale ogólnie powinno być żeby nie // importować nieobsługiwanych obiektów if (!canimport(ts)) return false; try { this.file = (File) ts.gettransferable().gettransferdata( FileTranferable.fileFlavor); this.destination = (JTextArea) ts.getcomponent(); Point p = ts.getdroplocation().getdroppoint(); this.popup.show(ts.getcomponent(), p.x, p.y); return true; catch (UnsupportedFlavorException IOException e) { return false; http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 16

PRZYKŁAD // Konstruktor, w którym tworzymy jeszcze menu kontekstowe, // które będzie nam określać sposób transferu danych public FileTransferHandler(){ super(); popup = new JPopupMenu(); JMenuItem mi = new JMenuItem("nazwa"); // TranferHandler jest również ActionListenerem. // Dzięki temu nie trzeba dodatkowo przekazywać // listenerowi informacji o transferowanym obiekcie mi.addactionlistener(this); mi.setactioncommand("name"); popup.add(mi); mi = new JMenuItem("zawartosc"); mi.addactionlistener(this); mi.setactioncommand("content"); popup.add(mi); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 17

PRZYKŁAD @Override public void actionperformed(actionevent e) { // przenosimy plik pod jako nazwe if (e.getactioncommand().equals("name")){ // dodajemy ją na koncu teksu, ale możnaby też sprawdzić // pozycje kursora i umieścić tewn tekst w okteślonej // pozycji this.destination.append(this.file.getname() + "\r\n"); else if (e.getactioncommand().equals("content")){ // zawartosc katalogu to nazwy plików, które zawiera if (this.file.isdirectory()) { for(string s : this.file.list()) this.destination.append(s + "\r\n"); http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 18

PRZYKŁAD // w przypadku plików obsługujemy tylko zawartosc plikow // tekstowych else if(this.file.getname().endswith(".txt")){ BufferedReader br; try { br = new BufferedReader( new FileReader(this.file)); String s; while((s=br.readline())!=null){ this.destination.append(s + "\r\n"); br.close(); catch (IOException e1) { http://th-www.if.uj.edu.pl/zfs/ciesla/ JĘZYK JAVA, FAIS UJ 2012/2013 19

DZIĘKUJĘ ZA UWAGĘ