Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.94/18: Рейтинг темы: голосов - 18, средняя оценка - 4.94
2 / 2 / 0
Регистрация: 21.05.2013
Сообщений: 17

Неверный переход курсора между компонентами по нажатию TAB

13.09.2016, 13:37. Показов 3427. Ответов 2

Студворк — интернет-сервис помощи студентам
Добрый день! Создал форму JDialog. По нажатию кнопки TAB на клавиатуре должен осуществляться переход между компонентами, располагающимися на ней. Настроил переход (через свойство "tab order" компонента JContentPane) в порядке tf1 -- tf2 -- tf3 -- ... (см. вложение), где tf1 -- JTextField под JLabel "Название", tf2 -- JTextField под JLabel "Тип" и tf3 -- JTextArea:
Java
1
getContentPane().setFocusTraversalPolicy(new FocusTraversalOnArray(new Component[]{tf1, tf2, tf3, okButton, cancelButton}));
Запустил программу, а она всё равно продолжает гнуть свою линию и выполнять переход в порядке tf1 -- tf3 -- tf2 -- ... Уже создал еще один проект и попробовал поиграться разными способами (и исключал tf3 с порядка, и перемещал tf3), но всё оказалось тщетно. Такое ощущение, что это поле свойств к JContentPane в WindowBuilder'е вообще не берётся в учёт. Отсюда вопрос: зачем оно нужно и как им пользоваться? Мануал к классу FocusTraversalOnArray тоже ни к каким идеям не привёл. Строка в коде, отвечающая за порядок есть, а на деле поведение программы не соответствует прописанному в коде.
Миниатюры
Неверный переход курсора между компонентами по нажатию TAB  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.09.2016, 13:37
Ответы с готовыми решениями:

Переход на форме по TAB между компонентами
Суть в чём, есть у меня на форме несколько Edit и что бы на каждый не щёлкать мышью, хочу сделать переход по TAB, такой переход и так...

Переход между компонентами формы (использование клавиши Tab)
При создании приложения в Delphi 7, на форму было добавлено множество компонент, переход между которыми можно осуществлять при помощи...

Переход курсора между Edit по нажатию Enter
Как сделать что при заполнение поля Edit1 и нажатием клавиши Enter курсор переходил на Edit2

2
126 / 113 / 56
Регистрация: 05.12.2012
Сообщений: 463
13.09.2016, 15:44
Лучший ответ Сообщение было отмечено punchik как решение

Решение

Попробовал, ситуацию спасла строчка
Java
1
this.setFocusTraversalPolicyProvider(true);
Вот весь код, вдруг пригодится...
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
package tabtest;
 
import java.awt.Component;
import java.awt.Container;
import java.awt.FocusTraversalPolicy;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
public class TabTest extends JPanel {
    
    private Component[] focusList;
    private int focusNumber = 0;
 
    TabTest() {
        JFrame frame = new JFrame("test");
 
        JLabel l1 = new JLabel("test_label");
        JTextField tf1 = new JTextField("test text field 1");
        JTextField tf2 = new JTextField("test text field 2");
        JButton b = new JButton("test_button");
 
        focusList = new Component[]{b, tf2, tf1};
 
        this.add(l1);
        this.add(tf1);
        this.add(tf2);
        this.add(b);
 
        this.setFocusTraversalPolicy(new MyFocusTraversalPolicy());
        this.setFocusTraversalPolicyProvider(true);
 
        frame.add(this);
 
        frame.setResizable(false);
        frame.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 
        frame.pack();
    }
 
    private class MyFocusTraversalPolicy extends FocusTraversalPolicy {
 
        @Override
        public Component getComponentAfter(Container focusCycleRoot, Component aComponent) {
            focusNumber = (focusNumber + 1) % focusList.length;
            return focusList[focusNumber];
        }
 
        @Override
        public Component getComponentBefore(Container focusCycleRoot, Component aComponent) {
            focusNumber = (focusList.length + focusNumber - 1) % focusList.length;
            return focusList[focusNumber];
        }
 
        @Override
        public Component getDefaultComponent(Container focusCycleRoot) {
            return focusList[0];
        }
 
        @Override
        public Component getLastComponent(Container focusCycleRoot) {
            return focusList[focusList.length - 1];
        }
 
        @Override
        public Component getFirstComponent(Container focusCycleRoot) {
            return focusList[0];
        }
    }
 
    public static void main(String[] args) {
        new TabTest();
    }
}
1
2 / 2 / 0
Регистрация: 21.05.2013
Сообщений: 17
13.09.2016, 16:11  [ТС]
Большое спасибо! Эта строчка действительно оказалась решением.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2016, 16:11
Помогаю со студенческими работами здесь

Как запретить переход по компонентам по нажатию Tab, если MaskEdit заполнен некорректно?
Уважаемые форумчане, здравствуйте. На форме имеется MaskEdit для ввода времени. Как запретить переход по компонентам по нажатию Tab, если...

Переход по Tab между панелями
Подскажите пожалуйста!Может кто знает, как осуществлять переход по клавише Tab между panel...У меня на форме несколько panel, на них...

Смена фокуса ввода между двумя компонентами по нажатию Enter
доброго времени суток. теперь к вопросу у меня есть программа которая состоит из listbox и edit. и мне нужно чтоб по нажатию на ентер...

Tab Control на WPF, переключение между вкладками по нажатию кнопки
Здравствуйте форумчане, есть вопрос связанный с Tab Control на WPF. Задача стоит следующая есть Tab Control с 5 вкладками. На каждой...

Переход между полями формы/таблицы (не при помощи Tab)
Добрый вечер всем! Возник вопрос по использованию клавиш ВВЕРХ/ВНИЗ/ВЛЕВО/ВПРАВО в качестве переходов между полями/таблицы формы в...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru