Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JFrame - баг с KeyListener? баг или Я не правильно понял 
V
    Опции темы
Fieral
Дата 6.6.2011, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



Проблема возникает при навешивании KeyListenera на JFrame - приложение почему-то начинает считывать данные с клавиатуры.


Дано: 

1) окно JFrame

Код


import java.awt.Canvas;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.HeadlessException;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyListener;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.WindowListener;
import java.awt.image.BufferStrategy;

import javax.swing.JFrame;

public class Window extends JFrame {

    private static final long serialVersionUID = -6079457947651675591L;
    public BufferStrategy bufferStrategy;
    public Graphics g;
    public int W;
    public int H;

    public Window(int H, int W, String title, WindowListener WL,
            KeyListener KL, MouseMotionListener MML, MouseListener ML) {
        super();
        {

            setIgnoreRepaint(true);
            // setMinimumSize(new Dimension(W, H));
            // setMaximumSize(new Dimension(W, H));
            this.W = W;
            this.H = H;
            setResizable(false);
            setTitle(title);

            JFrame.setDefaultLookAndFeelDecorated(true);

            // 2. Optional: What happens when the frame closes?
            canvas = new Canvas();
            canvas.setIgnoreRepaint(true);
            canvas.setSize(W, H);
            canvas.setBackground(Color.GRAY);
            add(canvas);

            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            addWindowListener(WL);
            addKeyListener(KL);
            canvas.addMouseListener(ML);
            // addMouseListener(ML);
            canvas.addMouseMotionListener(MML);
            // // 3. Create components and put them in the frame.
            // ...create emptyLabel...
            // frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
            getContentPane();

            // Add canvas to game window...

            Toolkit tk = Toolkit.getDefaultToolkit();
            Dimension screenSize = tk.getScreenSize();
            int h = screenSize.height;
            int w = screenSize.width;
            // this.setBackground(Color.WHITE);

            pack();

            setVisible(true);
            setLocation((w - this.getWidth()) / 2, (h - this.getHeight()) / 2);
            // System.out.println(this.getWidth());

            canvas.createBufferStrategy(2);
            bufferStrategy = canvas.getBufferStrategy();
        }
        System.gc();
        // createBufferStrategy(2);
        // bufferStrategy = getBufferStrategy();
    }

    final Canvas canvas;

    public final static void close(Window w) {
        // TODO Auto-generated method stub
        w.setVisible(false);
        w.dispose();
        System.gc();

    }

    

}



2) KeyListener

Код



import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class KeyBoard implements KeyListener {

    @Override
    public void keyTyped(KeyEvent e) {
        // TODO Auto-generated method stub
        System.out.println("t:" + e);

    }

    @Override
    public void keyPressed(KeyEvent e) {
        // TODO Auto-generated method stub
        System.out.println("p:" + e);

    }

    @Override
    public void keyReleased(KeyEvent e) {
        // TODO Auto-generated method stub
        System.out.println("r:" + e);

    }

}



Запускаю: 

Код


public static void main(String[] args) {
        // TODO Auto-generated method stub
        KeyBoard k = new KeyBoard();
        Window w = new Window(480, 640, "test", null, k, null, null);

    }




Что ожидал увидеть в консоли:

Код

p:java.awt.event.KeyEvent[KEY_PRESSED,keyCode=70,keyText=F,keyChar='f',keyLocation=KEY_LOCATION_STANDARD,rawCode=70,primaryLevelUnicode=102,scancode=33] on frame0
t:java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='f',keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
r:java.awt.event.KeyEvent[KEY_RELEASED,keyCode=70,keyText=F,keyChar='f',keyLocation=KEY_LOCATION_STANDARD,rawCode=70,primaryLevelUnicode=102,scancode=33] on frame0
p:java.awt.event.KeyEvent[KEY_PRESSED,keyCode=68,keyText=D,keyChar='d',keyLocation=KEY_LOCATION_STANDARD,rawCode=68,primaryLevelUnicode=100,scancode=32] on frame0
t:java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='d',keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
...


Но иногда вместо этого запускается считывани  с консоли:
user posted image


Вопрос: это баг или Я не прав? Что Я делаю не так?

спасибо.


--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
Fieral
Дата 6.6.2011, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



замена addKeyListener(KL); на canvas.addKeyListener(KL); частично помогает:
консоль печатает

Код

p:java.awt.event.KeyEvent[KEY_PRESSED,keyCode=70,keyText=F,keyChar='f',keyLocation=KEY_LOCATION_STANDARD,rawCode=70,primaryLevelUnicode=102,scancode=33] on frame0
t:java.awt.event.KeyEvent[KEY_TYPED,keyCode=0,keyText=Unknown keyCode: 0x0,keyChar='f',keyLocation=KEY_LOCATION_UNKNOWN,rawCode=0,primaryLevelUnicode=0,scancode=0] on frame0
...


однако не понятно почему всё также запускается чтение с консоли.
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
Skipy
Дата 6.6.2011, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



А Вы, часом, при этом в консольное окно не кликнули? Фокус у Вас на Вашем окне, или у IDE? Очень похоже на прямой ввод в консоль.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
Fieral
Дата 6.6.2011, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 250
Регистрация: 10.12.2007

Репутация: нет
Всего: 1



Цитата(Skipy @ 6.6.2011,  14:28)
А Вы, часом, при этом в консольное окно не кликнули? Фокус у Вас на Вашем окне, или у IDE? Очень похоже на прямой ввод в консоль.

Ну да, действительно на IDE.

Но буду примного благодарен, ежели поясните почему запускается чтение с консоли.
--------------------
Если собака свернулась калачиком, значит будет дождь, а если сидит выпучив глаза, значит у неё запор.
PM MAIL   Вверх
Skipy
Дата 7.6.2011, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 487
Регистрация: 24.8.2006
Где: Москва, Россия

Репутация: 4
Всего: 16



Что значит "чтение с консоли"? Вы кликнули на окно и всё, что Вы нажимаете на клавиатуре, идет туда, а не в Ваше приложение.


--------------------
С уважением,
Евгений aka Skipy
www.skipy.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0871 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.