Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 21
1

KeyListener для JPanel находящейся в JScrollPane, находящейся в JSplitPane

05.06.2016, 16:03. Показов 1385. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
есть окно разделенное на 4 части с помощью JSplitPane. в каждой из этих частей находится JScrollPane в котором лежит JPanel. нужно сделать так чтобы при нажатии на JPanel включался ее обработчик клавиатуры(KeyListener), но он почему то не включается((. в конструкторе JPanel пишу:

Java
1
2
addMouseListener(new TextFieldMouseListener());
addKeyListener(new TextFieldKeyListener());
t - ссылка на объект класса JPanel внутри этого объекта.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
private class MouseFieldListener implements MouseListener{
    public void mouseClicked(MouseEvent e){
        t.setFocusable(true);
    }
    public void mouseEntered(MouseEvent e){
        setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
    }
    public void mouseExited(MouseEvent e){  
        setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
    }
    public void mousePressed(MouseEvent e){}
    public void mouseReleased(MouseEvent e){}
}
Java
1
2
3
4
5
6
7
8
9
private class KeyFieldListener implements KeyListener{
    public void keyTyped(KeyEvent e){
        System.out.println("unicode");
    }
    public void keyPressed(KeyEvent e){
        System.out.println("any");
    }
    public void keyReleased(KeyEvent e){}
}
самое главное MouseFieldListener почему то работает и вызывает setFocusable(), но это не приводит к тому что KeyFieldListener начинает работать. подскажите пожалуйста, что можно сделать, чтобы он заработал.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.06.2016, 16:03
Ответы с готовыми решениями:

Добавление jPanel на jScrollPane
Приветствую всех! Столкнулся с такой проблемой: Есть отдельный класс jPanel, экземпляры которого...

Подключение к БД находящейся в ресурсах проекта
Здравствуйте, в общем надо подключиться к бд, которая включена в ресурсы проекта. БД в ресурсы...

Приложение с БД, находящейся на FTP сервере
Как реализовать приложение и базу данный (MS access) так, что бы база данных находилась на FTP...

Выборка Из Таблицы,находящейся В Обработке
Здравствуйте уважаемые старожилы форума. Я только начал постигать 1С (Версия 8.2). И на моём пути...

8
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
05.06.2016, 16:23 2
Какая связь между
Java
1
2
addMouseListener(new TextFieldMouseListener());
addKeyListener(new TextFieldKeyListener());
и
Java
1
2
private class KeyFieldListener
private class MouseFieldListener
?
1
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 21
05.06.2016, 17:06  [ТС] 3
это внутренние классы, они лежат внутри JPanel
0
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
05.06.2016, 17:12 4
Ты создаешь объект класса TextFieldMouseListener
Java
1
addMouseListener(new TextFieldMouseListener());
а приводишь код класса KeyFieldListener.
1
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 21
05.06.2016, 17:22  [ТС] 5
извини вот код панельки

Java
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
package GUIComponents.textfields;
 
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
 
import java.util.Vector;
 
import javax.swing.JLabel;
import javax.swing.JPanel;
 
@SuppressWarnings("serial")
 
public class TextField extends JPanel{
    public static void setCharSize(int newSize){
        charSize=newSize;
        font=new Font(fontStyle, Font.BOLD, charSize);
        
        for(int i=0; i<textFields.size(); ++i)
            textFields.get(i).redraw();
    }
    public static void setFontStyle(String style){
        fontStyle=style;
        font=new Font(fontStyle, Font.BOLD, charSize);
        
        for(int i=0; i<textFields.size(); ++i) textFields.get(i).redraw();
    }
    
    protected static Vector<TextField> textFields=new Vector<>();
    
    protected static int prefSizeX=1000, prefSizeY=1000;
    
    protected static int charSize=18;
    protected static String fontStyle="Serif";
    protected static Font font=new Font(fontStyle, Font.BOLD, charSize);
    
    public TextField(){
        setBackground(Color.white);
        setPreferredSize(new Dimension(prefSizeX, prefSizeY));
        
        textFields.add(this);
    }
    
    public void setText(String text){
        this.text.clear();
        this.text.add(text);
        
        redraw();
    }
    public void setText(String[] text){
        this.text.clear();
        for(int i=0; i<text.length; ++i) this.text.add(text[i]);
        
        redraw();
    }
    
    public void addText(String text){
        this.text.add(text);
        
        redraw();
    }
    public void addText(String[] text){
        for(int i=0; i<text.length; ++i) this.text.add(text[i]);
        
        redraw();
    }
    
    public void deleteAllText(){
        this.text.clear();
        
        redraw();
    }
    
    protected void redraw(){
        this.removeAll();
        
        if(text==null) return;
        
        setLayout(new GridLayout(prefSizeX/charSize, 1));
        
        for(int i=0; i<text.size(); ++i){
            JLabel label=new JLabel(text.get(i));
            
            label.setFont(font);
            add(label);
        }
    }
    
    protected Vector<String> text=new Vector<>();
}
Добавлено через 1 минуту
а это той в которой нужен KeyListener

Java
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
package GUIComponents.textfields;
 
import java.awt.Cursor;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
 
@SuppressWarnings("serial")
 
public class EditableTextField extends TextField{
    public EditableTextField(){
        super();
        
        this.addMouseListener(new MouseFieldListener());
        this.addKeyListener(new KeyFieldListener());
    }
    
    private EditableTextField t=this;
    
    private class MouseFieldListener implements MouseListener{
        public void mouseClicked(MouseEvent e){
            t.setFocusable(true);
        }
        public void mouseEntered(MouseEvent e){
            setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR));
        }
        public void mouseExited(MouseEvent e){  
            setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
        }
        public void mousePressed(MouseEvent e){}
        public void mouseReleased(MouseEvent e){}
    }
    private class KeyFieldListener implements KeyListener{
        public void keyTyped(KeyEvent e){
            System.out.println("unicode");
        }
        public void keyPressed(KeyEvent e){
            System.out.println("any");
        }
        public void keyReleased(KeyEvent e){}
    }
}
0
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
05.06.2016, 17:30 6
Добавь в панели
Java
1
setFocusable(true);
1
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 21
05.06.2016, 17:34  [ТС] 7
это я уже делал и оно работало нормально, но фигня в том то KeyListener должен начинать работать только при нажатии стрелкой мыши на панель. вот как это сделать я не знаю, пробовал setFocusable в mouseClicked запихивать, не работает
0
155 / 154 / 53
Регистрация: 30.04.2016
Сообщений: 321
05.06.2016, 17:46 8
Лучший ответ Сообщение было отмечено Marllboro как решение

Решение

Marllboro, Попробуй в mouseEntered добавить для каждой соответствующей панели
Java
1
panel.requestFocusInWindow();
У меня на одной панели работает, посмотри как будет на четырех.
1
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 21
05.06.2016, 17:51  [ТС] 9
ахахаххахахахахха блииииин парень, спасибо тебе огромное, я пол дня с этой *** возилс, заработало
0
05.06.2016, 17:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2016, 17:51
Помогаю со студенческими работами здесь

Обращение к функции находящейся не в MainActivity
Доброго времени суток! Имеется MainActivity.java и HybridMap.java. Мне необходимо при нажатии...

Подключение к СУБД, находящейся в Интернете
Всем привет, ASP прекрасно работает с сервером СУБД, если они находятся оба в одной локальной...

Выборка из таблицы, находящейся в Обработке
Здравствуйте уважаемые старожилы форума. Я только начал постигать 1С (Версия 8.2). И на моём пути...

Подключение БД, находящейся в папке с приложением
Здравствуйте, если в 1 папку скинуть программу и БД, то программа должна подключить сама БД, можно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru