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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UP with LEFT, Мда...... 
:(
    Опции темы
Rusico
Дата 26.8.2004, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте, даже не знаю с чего начать. Вопрос наверное глупый, однака где искал ненашёл.

Хочу чтоб моё приложение реагировало на события от клавы, что прекрасно работает, но ещё больше мне хочется чтоб оно реагировало на нажатие комбинаций клавиш, таких как UP одновременно с LEFT или RIGHT.

Может кто сталкивался с похожей проблемой? HELP!
ШПАШИБО.
PM MAIL   Вверх
Domestic Cat
Дата 26.8.2004, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Вот все что пришло в голову:

Код

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

public class test extends JFrame implements KeyListener
{
   JTextArea area = new JTextArea(2, 30);
   
   private boolean isUpPressed = false;
   private boolean isRightPressed = false;
           
   public test()
   {
       setSize(300, 300);
       
       JPanel panel = new JPanel();
       panel.setLayout(new BorderLayout());
       panel.add(area, BorderLayout.NORTH);
       JPanel panel2 = new JPanel();
       JButton but = new JButton("  ");
       panel2.add(but);
       getContentPane().add(panel2, BorderLayout.CENTER);
       getContentPane().add(panel, BorderLayout.NORTH);
       but.addKeyListener(this);
       setDefaultCloseOperation(EXIT_ON_CLOSE);
       setVisible(true);
   }

   public void keyPressed(KeyEvent ke)
   {
       if (ke.getKeyCode() == KeyEvent.VK_UP)
       {
           isUpPressed = true;
       } else
       if (ke.getKeyCode() == KeyEvent.VK_RIGHT)
       {
           isRightPressed = true;
       }
       if (isUpPressed && isRightPressed)
       {
           area.setText("You pressed up and right arrows!!!");
       }
   }
   
   public void keyReleased(KeyEvent ke)
   {
       if (ke.getKeyCode() == KeyEvent.VK_UP)
       {
           isUpPressed = false;
       } else
       if (ke.getKeyCode() == KeyEvent.VK_RIGHT)
       {
           isRightPressed = false;
       }
   }
   
   public void keyTyped(KeyEvent ke)
   {
       
   }
   
   public static void main(String [] arguments)
   {
       new test();
   }
}



По идее, должен быть способ попроще?


--------------------

PM   Вверх
Rusico
Дата 26.8.2004, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ЩА попробую, спасибо.
PM MAIL   Вверх
Rusico
Дата 26.8.2004, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



К сожалению не работает, если я конечно всё правильно сделал.
PM MAIL   Вверх
Domestic Cat
Дата 26.8.2004, 17:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



? Код работает, в примере нужно фокус кнопке отдать (нажать на нее), тогда кей листенер
заработает.


--------------------

PM   Вверх
Rusico
Дата 26.8.2004, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Щаз объясню: я пытаюсь написать маленькую програмку на java 3D, там кубик летает в 3-х мерном пространстве, а управляю я им по средствам клавиатуры, класс, который осуществляет его навигацию обрабатывает событие немного по другому:

import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.util.BitSet;
import java.util.*;

import javax.media.j3d.*;
import javax.vecmath.*;

import com.sun.j3d.utils.geometry.*;
import com.sun.j3d.utils.image.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.loaders.objectfile.ObjectFile;
import com.sun.j3d.loaders.Scene;

public class Navigator extends Behavior
{
private WakeupCondition wupcon;
private TransformGroup transform;

public Navigator(TransformGroup tr)
{
transform = tr;
WakeupOnAWTEvent wupevent = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED);
WakeupCriterion[] wupcrit = {wupevent};
wupcon = new WakeupOr(wupcrit);
}

public void initialize()
{
wakeupOn(wupcon);
}
public void processStimulus(Enumeration detected)
{
while(detected.hasMoreElements())
{
WakeupCriterion wupcrit = (WakeupCriterion)detected.nextElement();
if(wupcrit instanceof WakeupOnAWTEvent)
{
WakeupOnAWTEvent awtevent = (WakeupOnAWTEvent)wupcrit;
AWTEvent[] events = awtevent.getAWTEvent();
moveShape(events);
}
}
wakeupOn(wupcon);
}

public void moveShape(AWTEvent[] events)
{
boolean isForvPressed = false;
boolean isPrevPressed = false;
boolean isLeftPressed = false;
boolean isRighPressed = false;
boolean isUpPressed = false;
boolean isDownPressed = false;

for(int x=0;x<events.length;x++)
{
if(events[x] instanceof KeyEvent)
{
KeyEvent keyevent = (KeyEvent)events[x];
int keyCode = keyevent.getKeyCode();
if(keyevent.getID() == KeyEvent.KEY_PRESSED)
{
Transform3D trans = new Transform3D();
transform.getTransform(trans);
Vector3f trVector = new Vector3f();
trans.get(trVector);
if(keyCode == KeyEvent.VK_LEFT){isLeftPressed = true;}
if(keyCode == KeyEvent.VK_UP){isForvPressed = true;}
if(isLeftPressed && isForvPressed){System.out.println("YES");}
}
if(keyevent.getID() == KeyEvent.KEY_RELEASED)
{
if(keyCode == KeyEvent.VK_LEFT){isLeftPressed = false;}
if(keyCode == KeyEvent.VK_UP){isForvPressed = false;}
}
}
}
}
}
}
}
PM MAIL   Вверх
Domestic Cat
Дата 26.8.2004, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5452
Регистрация: 3.5.2004
Где: Dallas, US

Репутация: 50
Всего: 172



Тут не сработает; нужно помещать этот код в keyPressed, keyReleased.


--------------------

PM   Вверх
Rusico
Дата 26.8.2004, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ладно, всё равно спасибо smile.gif
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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