210 likes | 400 Views
AWT & SWING. Abstract Window Toolkit. Główne cele AWT to stworzenie interfejsu który będzie wyglądał równie dobrze na wszystkich maszynach... Wygląda równie źle. SWING. Ostateczna biblioteka GUI dla Javy 2. Zalety: Prostota i dobry projekt
E N D
AWT & SWING przygotował Michał Wdaniec
Abstract Window Toolkit Głó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
SWING 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
Przechwytywanie zdarzeń przygotował Michał Wdaniec
Action Listners • ActionListener • KeyListner • MouseListner przygotował Michał Wdaniec
ActionListner publicclassTestextendsJApplet{ privateJButtonb1=newJButton("Wyczysc"); privateJTextAreat=newJTextArea(20,40); publicvoidinit(){ b1.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ t.setText(""); }} ); ... przygotował Michał Wdaniec
MouseListner publicclassTestextendsJApplet{ privateJTextAreat=newJTextArea(20,40); publicclassMyMouseListenerimplementsMouseListener{ publicvoidmouseClicked(MouseEvente){ t.setText("Nacisnąłeś mysz");} publicvoidmouseExited(MouseEvente){} publicvoidmousePressed(MouseEvente){} publicvoidmouseReleased(MouseEvente){} publicvoidmouseEntered(MouseEvente){} } MyMouseListenerl1=newMyMouseListener(); publicvoidinit(){ addMouseListener(l1); ... przygotował Michał Wdaniec
publicclassSkiJumpextendsAppletimplementsRunnable,KeyListenerpublicclassSkiJumpextendsAppletimplementsRunnable,KeyListener publicvoidkeyReleased(KeyEvente){ 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 publicvoidinit(){ addKeyListener(this); ... classKeys { staticKeyskeys; publicstaticKeysKeys() { returnkeys; } /** *Isspacepressed? */ staticbooleanspace; /** *Isuparrowpressed? */ staticbooleanup; /** *Isdownarrowpressed? */ staticbooleandown; } KeyListener przygotował Michał Wdaniec
Inne 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
Rozmieszczanie komponentów przygotował Michał Wdaniec
Najważniejsze Layout Managery • BorderLayout • FlowLayout • GridLayout • BoxLayout przygotował Michał Wdaniec
BorderLayout publicclassTestextendsJApplet{ publicvoidinit(){ JPanelpanel1=newJPanel(); JPanelpanel2=newJPanel(); panel1.setLayout(newBoxLayout(panel1,BoxLayout.X_AXIS)); for(inti=0;i<3;i++) {panel1.add(newJButton("NORTH "+i));} panel2.setLayout(newBoxLayout(panel2,BoxLayout.Y_AXIS)); for(inti=0;i<2;i++) {panel2.add(newJButton("WEST "+i));} Containercp=getContentPane(); cp.setLayout(newBorderLayout()); cp.add(BorderLayout.NORTH,panel1); cp.add(BorderLayout.WEST,panel2); cp.add(BorderLayout.EAST,newJButton("EAST")); cp.add(BorderLayout.CENTER,newJButton("CENTER")); cp.add(BorderLayout.SOUTH,newJButton("SOUTH"));} } NORTH 0 NORTH 1 NORTH 2 WEST 0 WEST 1 CENTER EAST SOUTH przygotował Michał Wdaniec
FlowLayout 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
GridLayout Tworzy rozciągniętą tabele komponentów. Konstruktor: GridLayout(liczbaKolumn,LiczbaWierszy) Bardzo przydatny i estetyczny. przygotował Michał Wdaniec
BoxLayout 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
Pojemnik 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
Inne Przydatne/Ciekawe Rzeczy przygotował Michał Wdaniec
Wspaniałe wyskakujące okienka Wywoł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
Dźwięki, czyli wspaniała prostota Javy Aby 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
Podwójne buforowanie publicclassSkiJumpextendsAppletimplementsRunnable{ Graphics Gbuffer; //Obiekt rysujący na obrazek offscreen Image offscreen; //bufor, kopia ekranu Dimension dim; //Rozmiar okna Thread loop; //Wątek boolean running = true; publicvoid run(){ while (running) {repaint();//metoda uaktualniająca try{loop.sleep(10);}//oddajemy sterowanie catch (InterruptedException e){System.out.println(e);}}} publicvoid init(){ dim=getSize(); offscreen=createImage(dim.width,dim.height);//Tworzymy buffor Gbuffer=offscreen.getGraphics(); //Ustawiamy, Gbuffer na offscreen loop= new Thread(this); loop.start();} publicvoid paint(Graphics g){ //tutaj całe rysowanie, rysujemy na GBuffer g.drawImage(offscreen,0,0,this);}//przerysowanie bufora na ekran publicvoid update(Graphics g){ paint(g);} ... przygotował Michał Wdaniec
KONIEC (OKLASKI) przygotował Michał Wdaniec