Управление фокусом
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Управление фокусом Expand / Collapse
Автор
Сообщение
08.11.2006 14:20
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.03.2008 17:43
Сообщ.: 247, Visits: 2 370
Как мне задать элемент, изначально находящийся в фокусе? requestFocus работает только после отображения окна на экране, а мне хотелось бы задать енто дело в конструкторе окна... Использую менеджер компоновки BorderLayout и по умолчанию фокус ставится на элемент, находящийся в области BorderLayout.NORTH, а мне нужно начинасть с BorderLayout.CENTER... Есть там классы унаследованные от FocusTravelsalPolicy, но вот настроек у них никаких... разве что унаследовать с переопределением собственных методов, но это как-то слишком сложно для такой простой (и думается распространенной) операции
Сообщ. #907075
08.01.2007 19:32
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 31.01.2007 19:34
Сообщ.: 49, Visits: 507
java.awt.Component.requestFocusInWindow() должен помочь. И вообще Swing Tutorial читать не грех...
Сообщ. #909452
08.01.2007 22:00
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 29.05.2008 20:04
Сообщ.: 269, Visits: 2 381
несовсем уверен, что это то что тебе надо, но для передачи фокуса окну setFocusable(true);

----------------------------------
Я безработный...
Возьмите меня на работу. =)
Сообщ. #909456
14.01.2007 12:03
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.03.2008 17:43
Сообщ.: 247, Visits: 2 370
leska (08.01.2007)
java.awt.Component.requestFocusInWindow() должен помочь. И вообще Swing Tutorial читать не грех...

Не грех, но не такой уж и подвиг... Не помогло. Всякие requestFocus'ы начинают работать только после вывода окна на экран (что вполне логично). Мне же требовалось задать начальное положение фокуса при создании панели. За установку фокуса в компонентах отвечает класс-алгоритм LayoutFocusTraversalPolicy. Объект этого класса можно получить, но вот настроек у него соответствующих не нашел. Скорее всего помогла бы реализация своего класса на основе этого с переопределением какого-то метода. Но сроки поджимали невероятно (едва успел реализовать базовую функциональность). Посему решил задачу следующим образом - "да пусть начинает сверху - есть баги и посерьезней!" :)

Vizlim (08.01.2007)
несовсем уверен, что это то что тебе надо, но для передачи фокуса окну setFocusable(true);

setFocusable нужно чтобы сказать, что компонент вообще (теоретически) может иметь фокус. Это свойство я конечно выставлял. Сам по себе этот метод фокуса вроде не передает.

Сообщ. #909644
15.01.2007 16:32
Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 31.01.2007 19:34
Сообщ.: 49, Visits: 507
Пока пришло в голову тока такое решение. Не очень красиво, но похоже на то что надо. Не понятно тока почему надо ставить фокус исключительно в конструкторе...

public class MyForm extends JFrame {
private JTextField textField1 = new JTextField("Default Focus");
private JTextField textField2 = new JTextField("My Focus");

private WindowAdapter wa;
public MyForm() {
getContentPane().setLayout(new FlowLayout(FlowLayout.LEFT, 5, 5));
getContentPane().add(textField1);
getContentPane().add(textField2);

wa = new WindowAdapter() {
public void windowActivated(WindowEvent e) {
textField2.requestFocusInWindow();
e.getWindow().removeWindowListener(wa);
wa = null;
}
};

addWindowListener(wa);
}

public static void main(String[] args) {
MyForm f = new MyForm();
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
Сообщ. #909707
16.01.2007 13:13


Forum Member

Forum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum MemberForum Member

участник
Last Login: 13.11.2007 15:00
Сообщ.: 47, Visits: 400
leska (15.01.2007)
Не понятно тока почему надо ставить фокус исключительно в конструкторе...

Кто сказал?


Вы, конечно, можете избрать более правильный путь - реализовав нужную FocusTraversalPolicy. Но дерьма придется нахлебаться...
Сообщ. #909727
18.01.2007 10:58
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 30.03.2008 17:43
Сообщ.: 247, Visits: 2 370
wind (16.01.2007)
leska (15.01.2007)
Не понятно тока почему надо ставить фокус исключительно в конструкторе...

Кто сказал?


Вы, конечно, можете избрать более правильный путь - реализовав нужную FocusTraversalPolicy. Но дерьма придется нахлебаться...

Это да, но вот хлебать-то и не хотелось. Фокус в конструкторе потому, что там кроме генерации интерфейса хотелось и правило обхода элементов сразу задать. И меня ведь полностью устраивал порядок обхода, обусловленный компоновщиками (там разные использовались), только вот начать нужно было с другого... Ставиль фокус по активации окна думал, но тоже слишком мудрено выходит (побоялся побочных эффектов - интерфейс довольно сложный и не исключалась возможность присутствия нескольких панелей с необходимостью задать начальный элемент).

Сообщ. #909825
25.01.2007 16:53
Supreme Being

Supreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme BeingSupreme Being

участник
Last Login: 16.03.2007 12:40
Сообщ.: 135, Visits: 1 461
WindowListener - это совсем уж криво. Используйте HierarchyListener. Он срабатывает, среди прочего, после того, как компонент показан или спрятан, там можно перебросить фокус куда нужно. Нужно только иметь в виду, что
компонент показан
- это не только когда окно открыли и показали, а еще в таких случаях как переключение табов на JTabbedPane или при использовании CardLayout.
А чтобы было по-человечески, нужно действительно сделать FocusTraversalPolicy. Вполне вразумительный механизм; в сравнении с тем, что было раньше, просто отличный. Никакого гемора я там не заметил.
Сообщ. #910076
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik,