WDIS Laboratorium MateriaÅ‚y pomocnicze do ćwiczenia 2 WydziaÅ‚ Transportu PW MATERIAAY DO ĆWICZENIA 2 Aplikacja wykorzystujÄ…ca pakiet Swing Pakiet Swing, bÄ™dÄ…cy częściÄ… biblioteki Java Foundation Classes, umożliwia tworzenie w jÄ™zyku Java interaktywnych interfejsów graficznych, pozwalajÄ…cych wprowadzanie danych za pomocÄ… myszki, klawiatury i innych urzÄ…dzeÅ„ tego typu. Wszystkie skÅ‚adniki tego pakietu zostaÅ‚y caÅ‚kowicie zaimplementowane w jÄ™zyku Java, co zapewnia zgodność i niezależność wyglÄ…du poszczególnych skÅ‚adników pakietu na różnych platformach. Pierwszym etapem tworzenia aplikacji z wykorzystaniem pakietu Swing jest utworzenie klasy, która bÄ™dzie reprezentowaÅ‚a graficzny interfejs użytkownika. Obiekty tej klasy bÄ™dÄ… sÅ‚użyÅ‚y jako kontenery przechowujÄ…ce poszczególne skÅ‚adniki interfejsu. W wiÄ™kszoÅ›ci aplikacji takim wÅ‚aÅ›nie głównym obiektem interfejsu jest albo okno proste (Obiekt klasay JWindow), albo ramka (Obiekt klasy JFrame ), czyli okna z paskiem tytuÅ‚u oraz z przyciskami Minimalizuj, Maksymalizuj , Zamknij. A wiÄ™c jednym ze sposobów utworzenia graficznego interfejsu użytkownika wykorzystujÄ…cego pakiet Swing jest zdefiniowanie go jako podklasy klasy JFrame, tak jak to zrobiliÅ›my w naszym ćwiczeniu. Klasa JFrame Klasa JFrame posiada dwie metody tworzÄ…ce obiektu tej klasy czyli tzw. konstruktory : JFrame()-tworzy ramkÄ™ z pustym paskiem tytuÅ‚u JFrame(String)- tworzy ramkÄ™ z tytuÅ‚em reprezentowanym przez obiekt String Metody obiektowe, które mogÄ… być wywoÅ‚ywane na rzecz utworzonej ramki: Øð ðsetTitle(String) - nadaje tytuÅ‚ ramce Øð ðsetSize(int, int) - nadaje odpowiedni szerokość i wysokość ramki w pikselach Po utworzeniu ramka nie jest automatycznie widoczna, a wiÄ™c jeÅ›li chcemy ja wyÅ›wietlić, należy wywoÅ‚ać jednÄ… z poniższych metod: Øð ðshow() Øð ðsetVisible(true) Uwaga! W Edytorze Netbeans powyższe metody wykonywane sÄ… automatycznie, podczas wykonywania aplikacji dziedziczÄ…cej z kalsy JFrame Do ukrycia ramki sÅ‚użą metody hide() lub setVisible(false) Jeżeli tworzona ramka stanowi główne okno interfejsu aplikacji, to zazwyczaj oczekiwanym zachowaniem przycisku zamknij ramki jest zamkniÄ™cie caÅ‚ej aplikacji. Można tego dokonać przekazujÄ…c do metody setDeafultCloseOperation() parametr EXIT_ON_CLOSE Komponenty biblioteki Swing Pakiet javax.swing zawiera zestaw klas, sÅ‚użących do tworzenia graficznego interfejsu użytkownika, nazywanego w skrócie GUI (Graphical User Interface) ·ð ð Poszczególne skÅ‚adniki pakietu Swing (miÄ™dzy innymi takie jak przyciski, listy, etykiety czy pola wyboru) majÄ… jednÄ… wspólnÄ… klasÄ™ bazowÄ… javax.swing.JComponent. ·ð ð Wyróżniamy 2 rodzaje komponentów: kontenery (mogÄ… zawierać inne komponenty) kontrolki i sterownik (nie mogÄ… zawierać innych komponentów) Podstawowe klasy biblioteki Swing Klasa JButton ·ð ð Przyciski sÄ… jednym z najczęściej używanych elementów graficznego interfejsu użytkownika. ·ð ð Do tworzenia przycisków wykorzystuje siÄ™ nastÄ™pujÄ…ce konstruktory klasy Button: Button() - tworzy pusty przycisk (bez napisu) Button(String) - tworzy przycisk z napisem Uwaga! Podczas wstawiania dowolnego skÅ‚adnika na formÄ™ z palety komponentów, automatycznie w programie sÄ… wywoÅ‚ywane konstruktory i dopisywane odpowiednie metody dodajÄ…ce dany skÅ‚adnik do formy. ·ð ð Tekst na przycisku można ustawiać lub pobrać za pomocÄ… metod setText() lub getText Klasa JLabel ·ð ð Klasa JLabel sÅ‚uży do tworzenia etykiet umożliwiajÄ…cych wyÅ›wietlanie tekstu, ikony, lub obydwu tych elementów naraz w jednym wierszu. ·ð ð Etykiety sÄ… w zasadzie wykorzystywane do opisywania innych elementów, wiÄ™c tekst wyÅ›wietlany na nich nie może być modyfikowany przez użytkownika. ·ð ð Aby utworzyć etykietÄ™, można wykorzystać nastÄ™pujÄ…ce konstruktory (metody tworzÄ…ce obiekty): żð ðJLabel(String) etykieta tekstowa; żð ðJLabel(String, int ) etykieta tekstowa z okreÅ›lonym sposobem wyrównania; żð ðJLabel(String, Icon, int ) etykieta z tekstem, ikonÄ… i z okreÅ›lonym sposobem wyrównania (za sposób wyrównywania etykiety w stosunku do okna aplikacji odpowiadajÄ… 3 zmienne klasy SwingConstants: LEFT, CENTER, RIGHT Instrukcja tworzÄ…ca etykietÄ™ może mieć postać: JLabel lab1 = new JLabel("Etykieta1", SwingConstants.RIGHT); MateriaÅ‚y do użytku wewnÄ™trznego WDIS Laboratorium MateriaÅ‚y pomocnicze do ćwiczenia 2 WydziaÅ‚ Transportu PW JLabel lab2 = new JLabel("Etykieta2", SwingConstants.LEFT); JLabel lab3 = new JLabel("Etykieta2"); //( tu brak drugiego parametru powoduje wycentrowanie etykiety ) add(lab);// metoda dodania etykiety Komponenty tekstowe ·ð ð Pola tekstowe i obszary tekstowe to podklasy klasy komponentu tekstowego - JTextComponent. ·ð ð Pola tekstowe - obiekty klasy JTextField umożliwiajÄ… wprowadzanie i modyfikowanie tekstu, ale ich rozmiar jest ograniczony do jednego wiersza. ·ð ð Do wprowadzania wiÄ™kszych, wielowierszowych tekstów stosuje siÄ™ obszary tekstowe - obiekty klasy JTextArea. ·ð ð Dodatkowo dla obiektów klasy JTextArea dostÄ™pne sÄ… metody append(String) i insert(String, int), odpowiednio dodajÄ…ca tekst na koÅ„cu obszaru tekstowego i wstawiajÄ…ca tekst w miejscu wskazanym przez parametr int. Konstruktory klasy JTextField i JTextArea Metody tworzÄ…ce obiekt klasy JTextField i JTextArea umieszczone sÄ… w poniżej tabeli Konstruktor Opis JTextField() Tworzy nowe puste pole tekstowe JTextField(int) Tworzy nowe puste pole tekstowe o okreÅ›lonej dÅ‚ugoÅ›ci TextField(String, int) Tworzy obszar tekstowy o zawierajÄ…ce podany tekst o okreÅ›lonej dÅ‚ugoÅ›ci JTextArea(int, int) Tworzy obszar tekstowy o okreÅ›lonej liczbie wierszy i kolumn Tworzy obszar tekstowy o okreÅ›lonej liczbie wierszy i kolumn, a nastÄ™pnie JTextArea(String,int, int) wypeÅ‚nia go tekstem podanym parametrem String Metody klasy JComponent W klasie JComponent zdefiniowane sÄ… metody wspólne dla wszystkich komponentów. Metod tych używa siÄ™ do pobierania (get), ustawiania (set) i sprawdzania (is) wÅ‚aÅ›ciwoÅ›ci komponentów Size getSize() rozmiar komponentu getSize(Dimension rozmiar) setSize(int width, int height) Location getLocation() poÅ‚ożenie getLocation(Point p) setLocation(Point p) Bounds getBounds() lub getBounds(Rectangle r) rozmiar i poÅ‚ożenie setBounds(x, y, width, height) setBounds(Rectangle r) Font getFont() pismo setFont(Font f) Background getBackground() kolor tÅ‚a setBackground(Color c) Foreground getForeground() kolor pierwszego planu setForeground(Color c) , Visible isVisible() widzialność setVisible(boolean b) Enabled isEnabled() dostÄ™pność setEnabled(boolean b) Text setText() (dla skÅ‚adników tekstowych) tekst getText() setSelectedTex() getSelectedTex() Value setValue()dla skÅ‚adników przechowujÄ…cych wartość wartość getValue() Klasa Color Aby ustawić bieżący kolor dla operacji graficznych należy utworzyć obiekt klasy Color opisujÄ…cy taki kolor np : Color c =new Color(122,104,100); g.setColor(c); gdzie g jest obiektem typu Graphics albo skorzystać jednego ze standardowych kolorów zdefiniowanych w klasie Color np: Color.red Klasa Font Aby ustalić rodzaj fontu należy utworzyć obiekt klasy Font, który reprezentuje nazwÄ™, styl i rozmiar czcionki. Obiekt klasy Font tworzymy, przekazujÄ…c do konstruktora powyżej wymienione trzy parametry: Øð ðNazwa czcionki może być podana wprost jak np. Arial, TimesRoman, Courier, Dialog i inne. Øð ðStyl czcionki mogÄ… reprezentować 3 predefiniowane staÅ‚e: Font.PLAIN, Font.BOLD, Font.ITALIC Øð ðRozmiar czcionki podawany jest w punktach. PrzykÅ‚ad: Font f=New Font( Arial ,Font.BOLD,24); g.setFont(f); MateriaÅ‚y do użytku wewnÄ™trznego