Понедельник, 23 Декабря 2024, 01:52

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Java listeners
VintoreZ92Дата: Четверг, 10 Января 2013, 22:22 | Сообщение # 1
был не раз
Сейчас нет на сайте
Здравствуйте, начал изучать события библиотеки AWT,но не могу понять,почему не работают обработчики событий мыши? Использовал адаптеры.Вот код.

Код
import java.awt.*;
import java.awt.event.*;

public class awt extends Frame  {
     
   public Label label;
   public int mx,my;
     
   public awt(String title)
   {
    super(title);
    label = new Label("First label");
      
    MyWindowAdapter adapter = new MyWindowAdapter(this);
    MyKeyAdapter k_adapter = new MyKeyAdapter(this);
    MyMouseAdapter m_adapter = new MyMouseAdapter(this);
    MyMouseMotionAdapter mm_adapter = new MyMouseMotionAdapter(this);
    addMouseListener(m_adapter);
    addMouseMotionListener(mm_adapter);
    addKeyListener(k_adapter);
    addWindowListener(adapter);
    //addWindowListener(this);
    add(label);
      
   }
     

   public static void main(String[] args)   
   {
    Frame f;
    f = new awt("New frame");
    f.setSize(640,480);
    f.setVisible(true);
   }   
     
   public class MyWindowAdapter extends WindowAdapter
   {
      
    private Frame f;
      
    public MyWindowAdapter(Frame awt)
    {
     f = awt;
    }
      
    public void windowClosing(WindowEvent arg0)
    {
     //setVisible(false); // используется для апплетов
     System.exit(0);
    }
    public void windowActivated(WindowEvent arg0) {
    label.setText("windowActivated");
    }

    public void windowDeactivated(WindowEvent arg0) {
    label.setText("windowDeactivated");
       
    }
      
   };
     
   public class MyKeyAdapter extends KeyAdapter
   {
    public Frame f;
      
    public MyKeyAdapter(Frame awt)
    {
     f = awt;
    }
      
    public void keyPressed(KeyEvent e)
    {
     label.setText("keyPressed");//?
    }
    public void keyReleased(KeyEvent e)
    {
     label.setText("keyReleased");//?
    }
      
   }
    public class MyMouseAdapter extends MouseAdapter
    {
     public Frame f;
       
     public MyMouseAdapter(Frame awt)
     {
      f = awt;
     }
     public void mouseClicked(MouseEvent me)
     {
      label.setText("mouseClicked");
     }
     public void mouseEntered(MouseEvent me)
     {
      label.setText("mouseEntered");
     }
       
       
    }
    public class MyMouseMotionAdapter extends MouseMotionAdapter
    {
     public Frame f;
       
     public MyMouseMotionAdapter(Frame awt)
     {
      f = awt;
     }
     public void mouseMoved(MouseEvent me)
     {
      label.setText("mouseMoved");
     }
     public void mouseDragged(MouseEvent me)
     {
      label.setText("mouseDragged");
     }
       
    }

}


Сообщение отредактировал VintoreZ92 - Четверг, 10 Января 2013, 22:24
FadeBakerДата: Пятница, 11 Января 2013, 00:27 | Сообщение # 2
JavaSE Game Developer
Сейчас нет на сайте
VintoreZ92, работают все обработчики кроме обработчика событий мыши?

Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
xMoonGuarDxДата: Пятница, 11 Января 2013, 00:53 | Сообщение # 3
участник
Сейчас нет на сайте
кстати классы стоит называть с заглавных букв smile И вот как-то я не уверен, не будет ли конфликта имён?
Зачем наследовать от адаптера, если ты определяешь вроде как все свойства в нём?


Сообщение отредактировал xMoonGuarDx - Пятница, 11 Января 2013, 00:55
FadeBakerДата: Пятница, 11 Января 2013, 01:44 | Сообщение # 4
JavaSE Game Developer
Сейчас нет на сайте
Проще всего и удобнее будет такое решение:
Input.java
Код
public class Input implements KeyListener {
    public Input(Frame frame) {
       frame.addKeyListener(this);
    }
    public void keyPressed(KeyEvent e) {  
    }  
    public void keyReleased(KeyEvent e) {  
    }  
    public void keyTyped(KeyEvent e) {  
    }  
}

Awt.java
Код
public class Awt extends Frame {
    private Input input;
    public Frame() {
       super("Title");
       input = new Input(this);
    }
}

Осталось только подстроить под свои нужды. По такому же принципу добавишь и другие Listener'ы.


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
xMoonGuarDxДата: Пятница, 11 Января 2013, 10:46 | Сообщение # 5
участник
Сейчас нет на сайте
Ну в целом вообще советуют слушателей делать внутренними для класса, к которому они присоединены. События обрабатывать капельку легче и искать потом не надо будет их.
FadeBakerДата: Пятница, 11 Января 2013, 14:58 | Сообщение # 6
JavaSE Game Developer
Сейчас нет на сайте
xMoonGuarDx, смотря в каких случаях. Если кода в классе слушателя много, то его лучше вынести в отдельный файл, дабы не нагромождать код. А простые слушатели - да, лучше делать внутренними.

Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
VintoreZ92Дата: Пятница, 11 Января 2013, 20:34 | Сообщение # 7
был не раз
Сейчас нет на сайте
не работают события мыши, клавиатура откликается... в чем может быть засада?Тема актуальна,жду помощи...

Добавлено (11.01.2013, 20:34)
---------------------------------------------
Оказывается события мыши нельзя добавлять к классу Frame , попробовал присоединить к Label - заработало

Сообщение отредактировал VintoreZ92 - Пятница, 11 Января 2013, 19:53
FadeBakerДата: Пятница, 11 Января 2013, 20:59 | Сообщение # 8
JavaSE Game Developer
Сейчас нет на сайте
Цитата (VintoreZ92)
Оказывается события мыши нельзя добавлять к классу Frame

Наследуйся от класса JFrame.


Уроки по GM
Minecraft 2D на GM
— Мои проекты —
Blood Harvest [2D] — Original
Blood Harvest [2D]: Remastered Edition
Adventure Craft [2D] — Sandbox
Space Shock [2D] — Scroll Shooter
Intel® Core™ i5-3570K 3.40 GHz, 8 GB RAM, GeForce GTX 750 Ti, Monitor: LG 23EA63V-P.
xMoonGuarDxДата: Суббота, 12 Января 2013, 12:04 | Сообщение # 9
участник
Сейчас нет на сайте
Fade, JFrame уже SWING, а ему надо видимо с awt поработать.
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг