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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как определить принадлежит ли focus компоненту? 
:(
    Опции темы
anti_snayper
Дата 22.7.2011, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как узнать принадлежит ли фокус компоненту или одному из вложенных в него элементов? Причем вложенность мможет быть многоуровневой.

Спасибо.
PM MAIL   Вверх
dorogoyIV
Дата 22.7.2011, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



так пойдет?
Код

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

public class Test extends JFrame
                  implements ActionListener
{
 public Test()
 {
  setDefaultCloseOperation(3);
  setBounds(100, 100, 400, 300);

  JButton jb = new JButton("find focus");
  jb.addActionListener(this);
  jb.setFocusable(false);
  add(jb, "South");
  init();
 }

 private void init()
 {
  JPanel left = new JPanel();
  JPanel right = new JPanel();
  JPanel center = new JPanel();

  left.setName("Left panel");
  right.setName("Right panel");
  center.setName("Center panel");

  addComponents(left);
  addComponents(right);
  addComponents(center);

  add(left, "West");
  add(right, "East");
  add(center);
 }

 private void addComponents(JComponent jc)
 {
  JButton jb = new JButton("jb");
  JCheckBox jcb = new JCheckBox("jcb");
  jb.setName("JButton " + jc.getName());
  jcb.setName("JCheckBox " + jc.getName());
  jc.add(jb);
  jc.add(jcb);
 }

 public void actionPerformed(ActionEvent e)
 {
  findFocus(this);
 }

 private void findFocus(Container cont)
 {
  Component [] c = cont.getComponents();

  for(int i = 0; i < c.length; i++)
  {
   if(c [i].isFocusOwner())
   {
    new JOptionPane().showMessageDialog(null, c [i].getName() +
                       "\nparent: " + c [i].getParent().getName());
    break;
   }
   else
    findFocus((Container)c [i]);
  }
 }

 public static void main(String [] args)
 {
  SwingUtilities.invokeLater(new Runnable()
  {
   public void run()
   {
    new Test().setVisible(true);
   }
  });
 }
}

PM MAIL   Вверх
anti_snayper
Дата 22.7.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть сторонний компонент, запакованный в jar, который я встраиваю в аплет. Уж очень не хотелось переворачивать все его сорцы, но видимо придется... 
PM MAIL   Вверх
dorogoyIV
Дата 22.7.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

Репутация: 36
Всего: 46



если сторонний компонент унаследован от стандартного, то будет работать.
если нет, добавить в него public методы: getComponents(), isFocusOwner() - это методы java.awt.Component & java.awt.Container


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0626 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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