Java aplet obsługa zdarzenia

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!

0

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

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.

0

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

0

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

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.

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!

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);
        }
0

szasza:
Po to są te KeyListenery, k#%$@ 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.

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!

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