Java aplet obsługa zdarzenia

2011-03-07 18:02
0

Hi mam zamiar napisać aplet, który będzie zmieniał tło w zależności od wciśniętego przycisku.

import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;

class Menu extends Applet implements java.awt.event.KeyListener,
                                                                                        java.awt.event.MouseListener
{
    public  Menu()
    {
        addKeyListener(this);
        addMouseListener(this);
    }

    public void keyTyped(KeyEvent e)
    {
         if(e.getKeyCode() == KeyEvent.VK_R)
            setBackground(Color.RED);
        else if(e.getKeyCode() == KeyEvent.VK_G)
            setBackground(Color.GREEN);
        if(e.getKeyCode() == KeyEvent.VK_W)
            setBackground(Color.WHITE);
    }

    public void keyPressed(KeyEvent e) {

    }

    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mouseClicked(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mousePressed(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mouseReleased(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mouseEntered(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void mouseExited(MouseEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
public class NewApplet extends Applet implements java.awt.event.KeyListener
{
    public void init()
    {
        new Menu();
    }

    public void keyTyped(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyPressed(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void keyReleased(KeyEvent e) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}

W zasadzie - czy poprawnie dodałem obsługę zdarzeń dla klasy Menu? Jeśli nie to proszę o wskazówki dlaczego ten kod nie reaguje.

Pozdrawiam!

Pozostało 580 znaków

2011-03-07 18:09
bo
0

Na stronie umieszczasz zapewne aplet NewApplet, a zmieniasz tło niewidocznego apletu Menu.

Pozostało 580 znaków

2011-03-07 18:14
0

A czy przypadkiem listenery nie są wyrzucane, gdy spowodują wyjątek (i go nie obsłużą)?

Jeśli nie chcesz implementować większości metod z listenerów to rozszerzaj adaptery. Np KeyAdapter to klasa która implementuje KeyListener, ale nic nie robi.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
edytowany 1x, ostatnio: Wibowit, 2011-03-07 18:54
Z tymi Adapterami to nie wiedziałem - dziękuję bardzo za przydatną uwagę. - szasza 2011-03-07 18:42

Pozostało 580 znaków

2011-03-07 22:49
0

Prosiłbym o dalsze pomysły co zrobić aby ten kod zadziałał.
Pozdrawiam!

Pozostało 580 znaków

2011-03-07 23:00
0

Czytałeś komentarz bo? Dlaczego u ciebie są dwa Applety?


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-03-08 00:21
bo
0
import java.applet.Applet;
import java.awt.event.*;
import java.awt.*;

public class NewApplet extends Applet implements java.awt.event.KeyListener
{
    public void init()
    {
        addKeyListener(this);;
    }

    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_R)
        {
            setBackground(Color.RED);
        }
        else if(e.getKeyCode() == KeyEvent.VK_G)
        {
            setBackground(Color.GREEN);
        }
        if(e.getKeyCode() == KeyEvent.VK_W)
        {
            setBackground(Color.WHITE);
        }
    }

    public void keyTyped(KeyEvent e)
    {
    }

    public void keyReleased(KeyEvent e)
    {
    }
}

KeyListenera ma tylko obszar apletu na stronie. Żeby aplet reagował na zdarzenia klawiaturowe musi mieć fokus. Musisz wpierw chwycić mysz i kliknąć w obszar apletu.

Pozostało 580 znaków

2011-03-08 08:16
0

Witam, dziękuję Bo za pomoc.
Chciałbym jednak mieć klasę Menu, która powinna również dziedziczyć po Applet - chciałbym w niej korzystać z funkcji takich jak choćby setBackground. Jak można takie coś zrealizować aby nie tworzyć dwu apletów?

Dziękuję za pomoc i pozdrawiam!

Pozostało 580 znaków

2011-03-08 08:43
bo
0

Chciałbym jednak mieć klasę Menu, która powinna również dziedziczyć po Applet ..... Jak można takie coś zrealizować aby nie tworzyć dwu apletów?

Sprzeczne wymagania.
Do klasy Menu przekaż referencję do klasy NewApplet:

... new Menu(this);

"odbierz" ją w konstruktorze klasy Menu:

class Menu ...
{
    private Applet okno;
    public Menu(Applet okno)
    {
       this.okno=okno;

a obsługę zdarzeń napisz tak:

    public void keyPressed(KeyEvent e)
    {
        if(e.getKeyCode() == KeyEvent.VK_R)
        {
            okno.setBackground(Color.RED);
        }
Dlaczego chcesz, żeby klasa Menu dziedziczyła po klasie Applet? - bogdans 2011-03-08 09:43

Pozostało 580 znaków

2011-03-08 11:36
0

szasza:
Po to są te KeyListenery, k#%[email protected] twoja mać, żeby nie musieć trzymać wszystkiego w klasie rozszerzającej Applet. Klepiesz sobie osobną klaskę która jedyne co robi to implementuje KeyListenera i podajesz ją w metodzie addKeyListener. Dzięki temu jeden Applet może mieć wiele KeyListenerów i podobnie, jeden KeyListener może być podpięty pod wiele Appletów.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-03-08 17:50
0

Hi.

Dziękuję za pomoc.
Chciałem dziedziczyć z klasy Applet aby mieć możliwość użycia funkcji z tej klasy.
Bo - dziękuję za fragmenty kodu - bardzo pomocnego.

Mam jeszcze jeden problem - jak sądzę trywialny:

package javaapplication40;

import java.applet.Applet;
import java.awt.event.MouseEvent;

public class Paint extends Applet  implements java.awt.event.MouseMotionListener,
        java.awt.event.MouseListener
{
        private java.awt.Color color;
        private int size;

    public void init()
    {
            addMouseMotionListener(this);
            addMouseListener(this);
            size = 3;
    }

    public void paint(java.awt.Graphics g)
    { /*          kolory          */
            g.setColor(java.awt.Color.BLACK);
            g.fillRect(25, 25, 25, 25);

            g.setColor(java.awt.Color.RED);
            g.fillRect(55, 25, 25, 25);

            g.setColor(java.awt.Color.GREEN);
            g.fillRect(85, 25, 25, 25);

          /*      rozmiary pisaka   */

           g.setColor(java.awt.Color.BLACK);
           g.fillOval(25, 55, 10, 10);
           g.fillOval(25, 75, 15, 15);
           g.fillOval(25, 95, 20, 20);
    }
    public void mouseDragged(MouseEvent e)
    {
            java.awt.Graphics g = getGraphics();
            g.setColor(color);
            g.fillOval(e.getX(), e.getY(),size, size);
}
    public void mouseClicked(MouseEvent e)
    {
         // if [ (pozX < x + sz) && (PozX > x) && (pozY < y + wys) && (PozY > y) ]
        /*      Wybór kolorów       */
            if((e.getX() < 50) && (e.getX() > 25 ) && (e.getX() < 50) && (e.getX() > 25))
                color = java.awt.Color.BLACK;
            if((e.getX() < 80) && (e.getX() > 55) && (e.getY() < 50) && (e.getY() > 25) )
                color = java.awt.Color.RED;
            if((e.getX() < 110) && (e.getX() > 85) && (e.getY() < 50) && (e.getY() > 25) )
                color = java.awt.Color.GREEN;

            /*         Wybór rozmiaru pisaka        */
              if((e.getX() < 35) && (e.getX() > 25 ) && (e.getX() < 85) && (e.getX() >75))
                    size = 10;
             if((e.getX() < 40) && (e.getX() > 25 ) && (e.getX() < 90) && (e.getX() >75))
                 size = 10;
    }
     public void mouseMoved(MouseEvent e)   {}
    public void mousePressed(MouseEvent e) { }
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
}

Sprawa ma się tak: klikając na jeden z trzech kwadratów wybieram kolor "pisaka". Klikając na jedno z trzech kółek odpowiadających rozmiarowi pisaka nie dochodzi do aktualizacji wartość składowej size. Czy ktoś orientuje się dlaczego?

Pozdrawiam!

edytowany 1x, ostatnio: szasza, 2011-03-08 17:51

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0