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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Обработка нажатия на клавиатуру 
:(
    Опции темы
ElectricalStorm
Дата 10.3.2004, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



есть код который при нажатии на кавиши 1 2 3 выводит в STDOUT 1 2 3 соответственно
а как сделать так что бы по нажатию на клавишу 1 2 3 нажимались кнопки 1 2 3 соответственно
и обрабатывалось нажатие на кнопку
и выводилось в STDOUT - 1 2 3

?

Код

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

public class TestButton extends JFrame {
   JPanel jPanel1 = new JPanel();
   JButton jButton1 = new JButton();
   JButton jButton2 = new JButton();
   JButton jButton3 = new JButton();

   public TestButton() {
       this.setTitle("Test Button");
       jButton1.setText("1");
       jButton2.setText("2");
       jButton3.setText("3");

       KeyHandler listener = new KeyHandler();
       addKeyListener(listener);
       setFocusable(true);

       this.getContentPane().add(jPanel1, BorderLayout.CENTER);
       jPanel1.add(jButton1, null);
       jPanel1.add(jButton2, null);
       jPanel1.add(jButton3, null);
   }

   public static void main(String args[]) {
       try {
           UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
       } catch (Exception e) {
           e.printStackTrace();
       }
       TestButton frame = new TestButton();
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setBounds(100, 100, 200, 100);
       frame.show();
   }

   private class KeyHandler implements KeyListener {
       public void keyPressed(KeyEvent event) {
           int keyCode = event.getKeyCode();

           if (keyCode == KeyEvent.VK_1)
               System.out.println("Вы нажали  " + 1);
           else if (keyCode == KeyEvent.VK_2)
               System.out.println("Вы нажали  " + 2);
           else if (keyCode == KeyEvent.VK_3)
               System.out.println("Вы нажали  " + 3);
       }
       public void keyReleased(KeyEvent event) {
       }

       public void keyTyped(KeyEvent event) {
       }
   }
}



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
DarkDS
Дата 10.3.2004, 14:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



Я тебя чутка не понял, но в общем вот код с 2-я вариантами:
Код

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class JTestFrame extends JFrame {
JPanel jPanel1 = new JPanel();
JToggleButton jButton1 = new JToggleButton();
JToggleButton jButton2 = new JToggleButton();
JToggleButton jButton3 = new JToggleButton();

public JTestFrame() {
 this.setTitle("Test Button");
 jButton1.setText("1");
//Вариант 1: При нажатии на кнопку - нажимается отрабатывается нажатие на кнопку.
 jButton1.addActionListener( new ActionListener()
 {
  public void actionPerformed(ActionEvent e)
  {
   System.out.println( "Button 1 selected" );
  }
 } );
 jButton2.setText("2");
 jButton2.addActionListener( new ActionListener()
 {
  public void actionPerformed(ActionEvent e)
  {
   System.out.println( "Button 1 selected" );
  }
 } );
 jButton3.setText("3");
 jButton3.addActionListener( new ActionListener()
 {
  public void actionPerformed(ActionEvent e)
  {
   System.out.println( "Button 1 selected" );
  }
 } );
 KeyHandler listener = new KeyHandler();
 addKeyListener(listener);
 //setFocusable(true);

 this.getContentPane().add(jPanel1, BorderLayout.CENTER);
 jPanel1.add(jButton1, null);
 jPanel1.add(jButton2, null);
 jPanel1.add(jButton3, null);
}

public static void main(String args[]) {
 try {
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 } catch (Exception e) {
  e.printStackTrace();
 }
 JTestFrame frame = new JTestFrame();
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setBounds(100, 100, 200, 100);
 frame.show();
}

private class KeyHandler implements KeyListener {
 public void keyPressed(KeyEvent event) {
  int keyCode = event.getKeyCode();

  if (keyCode == KeyEvent.VK_1)
  {
   System.out.println("Вы нажали  " + 1);
//Вариант 1: При нажатии на кнопку - нажимается сама кнока.
   jButton1.setSelected( !jButton1.isSelected() );
  }
  else if (keyCode == KeyEvent.VK_2)
  {
   System.out.println("Вы нажали  " + 2);
   jButton2.setSelected( !jButton2.isSelected() );
  }
  else if (keyCode == KeyEvent.VK_3)
  {
   System.out.println("Вы нажали  " + 3);
   jButton3.setSelected( !jButton3.isSelected() );
  }
 }
 public void keyReleased(KeyEvent event) {
 }

 public void keyTyped(KeyEvent event) {
 }
}
}


Единственное но: при вызове сетСелектед не вызывается ActionListener.
Если нужно чтобы при нажатии на 1, 2, 3 отрабатывался какой Листенер соотвесвующей кнопки, проще сделать метод, который будет обрабатывать нажатие кнопки (к примеру тот же System.out.println делать) и вызывать его из листенера кнопки и клавиатуры
PM MAIL   Вверх
ElectricalStorm
Дата 10.3.2004, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо огромное что откликнулись !!!
я запустил Ваше приложение но при нажатии на 1 ничег оне произошло sad.gif



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
ElectricalStorm
Дата 10.3.2004, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я хотел бы сделать также как
при setMnemonic('c') мы нажимаем alt +c фокус падпет на кнопку и она нажимается и вске здорово
но я хотел бы тоже самое тока без alt ...


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
DarkDS
Дата 10.3.2004, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



Тогда все намного проще:
Код

import javax.swing.*;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

public class JTestFrame extends JFrame {
JPanel jPanel1 = new JPanel();
JButton jButton1 = new JButton();
JButton jButton2 = new JButton();
JButton jButton3 = new JButton();

public JTestFrame() {
 this.setTitle("Test Button");

 ActionListener actionListener = new ActionListener()
 {
  public void actionPerformed(ActionEvent e)
  {
   selectButton( (JButton)e.getSource() );
  }
 };
 jButton1.setText("1");
 jButton1.addActionListener( actionListener );
 jButton2.setText("2");
 jButton2.addActionListener( actionListener );
 jButton3.setText("3");
 KeyHandler listener = new KeyHandler();
 addKeyListener(listener);
 //setFocusable(true);

 this.getContentPane().add(jPanel1, BorderLayout.CENTER);
 jPanel1.add(jButton1, null);
 jPanel1.add(jButton2, null);
 jPanel1.add(jButton3, null);
}

private void selectButton( JButton button )
{
 button.requestFocus();
 if ( button == jButton1 )
  System.out.println("Button 1 pressed");
 if ( button == jButton2 )
  System.out.println("Button 1 pressed");
 if ( button == jButton3 )
  System.out.println("Button 1 pressed");
}

public static void main(String args[]) {
 try {
  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
 } catch (Exception e) {
  e.printStackTrace();
 }
 JTestFrame frame = new JTestFrame();
 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 frame.setBounds(100, 100, 200, 100);
 frame.show();
}

private class KeyHandler implements KeyListener {
 public void keyPressed(KeyEvent event) {
  int keyCode = event.getKeyCode();

  if (keyCode == KeyEvent.VK_1)
  {
   selectButton( jButton1 );
  }
  else if (keyCode == KeyEvent.VK_2)
  {
   selectButton( jButton2 );
  }
  else if (keyCode == KeyEvent.VK_3)
  {
   selectButton( jButton3 );
  }
 }
 public void keyReleased(KeyEvent event) {
 }

 public void keyTyped(KeyEvent event) {
 }
}
}

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


Опытный
**


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

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



Спасибо большое за помощь !!!
я наверное не правильно написал .... sad.gif
в вашем примере при нажатии на кнопки 1 2 3 вообще ничего не происходит если раскоментировать
//setFocusable(true); то при нажати на 1 все работает но только один раз нажатие на 2 и 3 не работатют совсем .. . sad.gif





--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
DarkDS
Дата 10.3.2004, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



В каком из?
setFocusable(true); закоментированно, так как у меня JDK 1.3 сейчас установленна.

ЗЫ. в последнем примере в систем аутах сообщение поменять нужно smile.gif
PM MAIL   Вверх
ElectricalStorm
Дата 10.3.2004, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



во втором примере

сообщения я поменял


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
DarkDS
Дата 10.3.2004, 18:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник Клуба
Сообщений: 748
Регистрация: 6.5.2003
Где: Таллинн, Эстония

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



Цитата(ElectricalStorm @ 10.3.2004, 17:57)
во втором примере

сообщения я поменял

Хмм... Возможно это изза версий явы (у меня усе работает)....
А если поменять вот так:
Код

private void selectButton( JButton button )
{
button.requestFocus();

if ( button == jButton1 )
 System.out.println("Button 1 pressed");
if ( button == jButton2 )
 System.out.println("Button 2 pressed");
if ( button == jButton3 )
 System.out.println("Button 3 pressed");

requestFocus();
}


Это сообщение отредактировал(а) DarkDS - 10.3.2004, 18:19
PM MAIL   Вверх
ElectricalStorm
Дата 10.3.2004, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



smile.gif ага заработало тока кнопки не нажимаются smile.gif


--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
ElectricalStorm
Дата 10.3.2004, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



я поставил вот так

Код

       if (button == jButton1)
           jButton1.doClick();

       if (button == jButton2)
           jButton2.doClick();

       if (button == jButton3)
           jButton3.doClick();



3 кнопка рабоатет супер
апри нажатии на 1 и 2 зависает sad.gif



--------------------
Нужно знать инструмент, которым пользуешься
PM MAIL   Вверх
ElectricalStorm
Дата 10.3.2004, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Спасибо большое за помощь что-то получилось

Код

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

public class TestButtons {
   public static void main(String[] args) {
       JFrame frame1 = new MyFrame();
       frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame1.show();
   }
}

class MyFrame extends JFrame {
   public MyFrame() {
       setTitle("Button Test");
       setBounds(100,300,400,200);

       JPanel panel1 = new JPanel();
       Container myPane = getContentPane();
       myPane.add(panel1);

       JButton b1 =  new JButton("1");
       JButton b2 =  new JButton("2");
       JButton b3 =  new JButton("3");

       Action b1Action = new ButtonAction("1", b1);
       Action b2Action = new ButtonAction("2", b2);
       Action b3Action = new ButtonAction("3", b3);

       b1.registerKeyboardAction(b1Action, KeyStroke.getKeyStroke(KeyEvent.VK_1, 0),
               JComponent.WHEN_IN_FOCUSED_WINDOW);
       b2.registerKeyboardAction(b2Action, KeyStroke.getKeyStroke(KeyEvent.VK_2, 0),
               JComponent.WHEN_IN_FOCUSED_WINDOW);
       b3.registerKeyboardAction(b3Action, KeyStroke.getKeyStroke(KeyEvent.VK_3, 0),
               JComponent.WHEN_IN_FOCUSED_WINDOW);

       panel1.add(b1);
       panel1.add(b2);
       panel1.add(b3);
       panel1.setFocusable(true);
   }

   class ButtonAction extends AbstractAction {
       private JButton target;
       private String name;

       public ButtonAction(String n, JButton comp) {
           putValue(Action.NAME, n);
           target = comp;
           name = n;
       }

       public void actionPerformed(ActionEvent evt) {
           target.doClick();
           System.out.println("Нажали кнопку с номером - " + name);
       }
   }

}







--------------------
Нужно знать инструмент, которым пользуешься
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.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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