przygotował Michał Wdaniec

1 przygotował Michał WdaniecAWT & SWING przygotował Micha...
Author: Wincenty Parda
0 downloads 0 Views

1 przygotował Michał WdaniecAWT & SWING przygotował Michał Wdaniec

2 Abstract Window ToolkitGłówne cele AWT to stworzenie interfejsu który będzie wyglądał równie dobrze na wszystkich maszynach... Wygląda równie źle. przygotował Michał Wdaniec

3 przygotował Michał WdaniecSWING Ostateczna biblioteka GUI dla Javy 2. Zalety: Prostota i dobry projekt Czytelność kodu, nawet wygenerowanego przez narzędzia graficzne Możliwość umieszczania wstawek HTML w komponentach. przygotował Michał Wdaniec

4 Przechwytywanie zdarzeńprzygotował Michał Wdaniec

5 przygotował Michał WdaniecAction Listners ActionListener KeyListner MouseListner przygotował Michał Wdaniec

6 przygotował Michał WdaniecActionListner public class Test extends JApplet { private JButton b1 = new JButton("Wyczysc"); private JTextArea t = new JTextArea(20,40); public void init() { b1.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e){ t.setText(""); }} ); ... przygotował Michał Wdaniec

7 przygotował Michał WdaniecMouseListner public class Test extends JApplet { private JTextArea t = new JTextArea(20,40); public class MyMouseListener implements MouseListener{ public void mouseClicked(MouseEvent e){ t.setText("Nacisnąłeś mysz");} public void mouseExited(MouseEvent e){} public void mousePressed(MouseEvent e){} public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} } MyMouseListener l1 = new MyMouseListener(); public void init() { addMouseListener(l1); ... przygotował Michał Wdaniec

8 przygotował Michał WdaniecKeyListener class Keys { static Keys keys; public static Keys Keys() return keys; } /** * Is space pressed? */ static boolean space; * Is up arrow pressed? static boolean up; * Is down arrow pressed? static boolean down; public class SkiJump extends Applet implements Runnable, KeyListener public void keyReleased(KeyEvent e){ if (e.getKeyCode()==KeyEvent.VK_SPACE){ Keys.space=false;} if (e.getKeyCode()==KeyEvent.VK_UP){ Keys.up=false;} if (e.getKeyCode()==KeyEvent.VK_DOWN){ Keys.down=false;} return; //inne metody wymagające przysłonienia public void init(){ addKeyListener(this); ... przygotował Michał Wdaniec

9 przygotował Michał WdaniecInne Listnery Nazwa Komponenty które generują zdarzenie Action Jbutton,Jlist,JTextField,JMenuItem... Component Component i dziedziczące Container Container i dziedziczące MouseMotion Component i dziedziczące Item JCheckBox, JComboBox... Window Window i dziedziczące Text JTextComponent i dziedziczące przygotował Michał Wdaniec

10 Rozmieszczanie komponentówprzygotował Michał Wdaniec

11 Najważniejsze Layout ManageryBorderLayout FlowLayout GridLayout BoxLayout przygotował Michał Wdaniec

12 przygotował Michał WdaniecBorderLayout public class Test extends JApplet { public void init() { JPanel panel1=new JPanel(); JPanel panel2=new JPanel(); panel1.setLayout(new BoxLayout(panel1,BoxLayout.X_AXIS)); for (int i=0;i<3;i++) {panel1.add(new JButton("NORTH "+i));} panel2.setLayout(new BoxLayout(panel2,BoxLayout.Y_AXIS)); for (int i=0;i<2;i++) {panel2.add(new JButton("WEST "+i));} Container cp= getContentPane(); cp.setLayout(new BorderLayout()); cp.add(BorderLayout.NORTH,panel1); cp.add(BorderLayout.WEST,panel2); cp.add(BorderLayout.EAST,new JButton("EAST")); cp.add(BorderLayout.CENTER,new JButton("CENTER")); cp.add(BorderLayout.SOUTH,new JButton("SOUTH"));} } NORTH 0 NORTH 1 NORTH 2 WEST 0 WEST 1 CENTER EAST SOUTH przygotował Michał Wdaniec

13 przygotował Michał WdaniecFlowLayout Ustawia komponenty w poziomej linii, jeżeli się nie mieszczą przesuwa je do następnej. Bardzo nie polecany ze względu na przemieszczanie się elementów miedzy liniami w trakcie zmiany rozmiaru okna. przygotował Michał Wdaniec

14 przygotował Michał WdaniecGridLayout Tworzy rozciągniętą tabele komponentów. Konstruktor: GridLayout(liczbaKolumn,LiczbaWierszy) Bardzo przydatny i estetyczny. przygotował Michał Wdaniec

15 przygotował Michał WdaniecBoxLayout Pozwala na rozmieszczenie elementów w pionie lub poziomie za pomącą „rozdzielaczy i kleju”. Nazwa „klej” jest myląca i oznacza sprężynę.  Konstruktor: BoxLayout(pojemnik,BoxLayout.X_AXIS) przygotował Michał Wdaniec

16 przygotował Michał WdaniecPojemnik Box Pojemnik z domyślnym menadżerem BoxLayout. Konstruktor: Box myBox = Box.createVerticalBox(); Tworzenie kleju: myBox.add(Box.createVerticalGlue()); Tworzenie rozdzielaczy: myBox.add(Box.createRigidArea(new Dimension(szerokosc,wysokosc))); przygotował Michał Wdaniec

17 Inne Przydatne/Ciekawe Rzeczyprzygotował Michał Wdaniec

18 Wspaniałe wyskakujące okienkaWywołuje je metoda JOptionPane.showTypDialog(null, ”Napis na pasku”,”Napis w oknie”, ...pozostałe opcje w zależności od typu..., JOptionPane.Typ_Obrazka_w_Okienku) gdzie: Typ – typ okienka Przykład: JOptionPane.showMessageDialog(null, „Błąd krytyczny", „Wystąpił błąd krytyczny 39h. Twój dysk twardy został sformatowany.", JOptionPane.ERROR_MESSAGE); przygotował Michał Wdaniec

19 Dźwięki, czyli wspaniała prostota JavyAby odtworzyć dźwięk w Javie wystarczy wywołać metodę klasy Applet: play(URL codec,nazwaPliku); Jako pierwszy argument najczęściej wywołuje się metodę getCodecBase() Przykład: play(getCodecBase(),”plik.wav”); Takie wywołanie pozwala na odtwarzanie plików w formacie wave. przygotował Michał Wdaniec

20 przygotował Michał WdaniecPodwójne buforowanie public class SkiJump extends Applet implements Runnable{ Graphics Gbuffer; //Obiekt rysujący na obrazek offscreen Image offscreen; //bufor, kopia ekranu Dimension dim; //Rozmiar okna Thread loop; //Wątek boolean running = true; public void run(){ while (running) {repaint();//metoda uaktualniająca try{loop.sleep(10);}//oddajemy sterowanie catch (InterruptedException e){System.out.println(e);}}} public void init(){ dim=getSize(); offscreen=createImage(dim.width,dim.height);//Tworzymy buffor Gbuffer=offscreen.getGraphics(); //Ustawiamy, Gbuffer na offscreen loop= new Thread(this); loop.start();} public void paint(Graphics g){ //tutaj całe rysowanie, rysujemy na GBuffer g.drawImage(offscreen,0,0,this);}//przerysowanie bufora na ekran public void update(Graphics g){ paint(g);} ... przygotował Michał Wdaniec

21 przygotował Michał WdaniecKONIEC (OKLASKI) przygotował Michał Wdaniec