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 |
участник
Сейчас нет на сайте
| кстати классы стоит называть с заглавных букв И вот как-то я не уверен, не будет ли конфликта имён? Зачем наследовать от адаптера, если ты определяешь вроде как все свойства в нём?
Сообщение отредактировал 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 поработать.
|
|
| |