powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужно задействовать KeyListener для JLabel.
3 сообщений из 3, страница 1 из 1
Нужно задействовать KeyListener для JLabel.
    #34033022
AlexeyShponarsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нужно задействовать KeyListener для JLabel. на нее она не действует так как нельзя ее выбрать. Может можно как-то програмно на нее подействовать? типа фокус поставить что-ли, пробую setFocusable(true) - не действует. вообщем мне нужно что бы ее можно было двигатьс помощью клавы.
Вот код программы:
-------------------------------------------------------------------
package test;

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

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class MoveTest extends JFrame implements KeyListener{

private JTextField textField = new JTextField(20);

private JTextField textField1 = new JTextField(20);

private JLabel label= new JLabel("hello");

public MoveTest(){
setLayout(null);
initialize();
}

private void initialize() {
textField.setSize(50,50);
textField.setLocation(100,100);
textField.addKeyListener(this);

textField1.setSize(50,50);
textField1.setLocation(200,100);
textField1.addKeyListener(this);

label.setSize(50,50);
label.setLocation(300,100);
label.addKeyListener(this);

getContentPane().add(textField);
getContentPane().add(textField1);
getContentPane().add(label);
setSize(640, 480);
show();
}

public static void main(String[] args) {
new MoveTest();
}

public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub

}

public void keyPressed(KeyEvent arg0) {
Point point = arg0.getComponent().getLocation();
if(arg0.getKeyCode()== 37){
point.x -= 1;
}else if(arg0.getKeyCode()== 38){
point.y -=1;
}else if(arg0.getKeyCode()== 39){
point.x +=1;
}else if(arg0.getKeyCode()== 40){
point.y +=1;
}


arg0.getComponent().setLocation(point);
validate();
repaint();
}

public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub

}

}
--------------------------------------------
...
Рейтинг: 0 / 0
Нужно задействовать KeyListener для JLabel.
    #34036298
mysterio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
/*
 * FocusableLableTest.java
 */

 package  mipt.mysterio.gui;

 import  java.awt.Color;
 import  java.awt.event.ActionEvent;
 import  java.awt.event.KeyEvent;
 import  javax.swing.AbstractAction;
 import  javax.swing.Action;
 import  javax.swing.ActionMap;
 import  javax.swing.BorderFactory;
 import  javax.swing.InputMap;
 import  javax.swing.JComponent;
 import  javax.swing.JFrame;
 import  javax.swing.JLabel;
 import  javax.swing.KeyStroke;

 public   class  FocusableLabelTest  extends  JFrame {
     public  FocusableLabelTest() {
         super ("Test");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        
        JLabel label =  new  FocusableLabel();
        label.setBorder(BorderFactory.createLineBorder(Color.RED));
        
        //Отключаем менеджер расстановки (иначе как мы ее сможем перетаскивать?)
        setLayout( null );
        
        label.setLocation( 50 ,  50 );
        label.setSize( 100 ,  20 );
        
        label.setFocusable(true);
        
        add(label);
        
        setSize( 400 ,  400 );
        setVisible(true);
    }
    
     public   static   void  main(String args[]) {
         new  FocusableLabelTest();
    }
    
     static   class  FocusableLabel  extends  JLabel {
         public  FocusableLabel() {
             super ("метка");
            setFocusable(true);
            
            InputMap im = getInputMap();
            im.put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, KeyEvent.SHIFT_DOWN_MASK), "MoveUp");
            im.put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, KeyEvent.SHIFT_DOWN_MASK), "MoveDown");
            im.put(KeyStroke.getKeyStroke(KeyEvent.VK_LEFT, KeyEvent.SHIFT_DOWN_MASK), "MoveLeft");
            im.put(KeyStroke.getKeyStroke(KeyEvent.VK_RIGHT, KeyEvent.SHIFT_DOWN_MASK), "MoveRight");
            
            ActionMap am = getActionMap();
                                   
            am.put("MoveUp",  new  MoveAction("MoveUp"));
            am.put("MoveDown",  new  MoveAction("MoveDown"));
            am.put("MoveLeft",  new  MoveAction("MoveLeft"));
            am.put("MoveRight",  new  MoveAction("MoveRight"));
        }
        
         static   class  MoveAction  extends  AbstractAction {
            MoveAction(String name) {
                 super (name);                
            }            
            
             public   void  actionPerformed(ActionEvent e) {
                 int  dx, dy;
                String command = (String) getValue(NAME);
                 if  (command.equals("MoveUp")) {
                    dx =  0 ; dy = - 1 ;
                }  else   if  (command.equals("MoveDown")) {
                    dx =  0 ; dy =  1 ;
                }  else   if  (command.equals("MoveLeft")) {
                    dx = - 1 ; dy =  0 ;
                }  else  {
                    dx =  1 ; dy =  0 ;
                }

                JComponent source = (JComponent) e.getSource();
                System.out.println(command);
                source.setLocation(source.getX() + dx * VALUE, source.getY() + dy * VALUE);
            }
            
             private   static   final   int  VALUE =  10 ;
        }
        
    }
}
...
Рейтинг: 0 / 0
Нужно задействовать KeyListener для JLabel.
    #34042547
AlexeyShponarsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
Мне вообще нужно было использовать функцию - requestFocus(), нашол спасибо.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Нужно задействовать KeyListener для JLabel.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]