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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Что мешает вводить текст в JTextField? Что мешает вводить текст в JTextField? 
V
    Опции темы
Flashed
Дата 5.4.2011, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вот программа 1:
Код


        import java.awt.Graphics; 
        import java.awt.Window; 
        import javax.swing.JFrame; 
        import javax.swing.JTextField; 
        import javax.swing.JWindow; 
          
          
        public class MyWindow extends JFrame{ 
          
            public MyWindow() 
            { 
                super(); 
                setSize(300,200); 
                setLayout(null); 
                setVisible(true); 
                  
                JTextField textField = new JTextField(); 
                textField.setBounds(30, 50, 100, 30); 
                add(textField); 
                repaint(); 
            } 
            public void paint(Graphics _g) 
            { 
                super.paint(_g); 
            } 
            public static void main(String _s[]) 
            { 
                MyWindow mw= new MyWindow(); 
            } 
        }
 

В ней текст вводиться в поле textField, как и следовало ожидать  smile 
А вот если наследовать от JWindow... 
программа 2:
Код

import java.awt.Graphics; 
        import java.awt.Window; 
        import javax.swing.JFrame; 
        import javax.swing.JTextField; 
        import javax.swing.JWindow; 
          
          
        public class MyWindow extends JWindow{ 
          
            public MyWindow() 
            { 
                super(); 
                setSize(300,200); 
                setLayout(null); 
                setVisible(true); 
                  
                JTextField textField = new JTextField(); 
                textField.setBounds(30, 50, 100, 30); 
                add(textField); 
                repaint(); 
            } 
            public void paint(Graphics _g) 
            { 
                super.paint(_g); 
            } 
            public static void main(String _s[]) 
            { 
                MyWindow mw= new MyWindow(); 
            } 
        }

Поле textField как замороженное. (фокус не обретает, текст не вводиться, хотя курсор - коретка) Кто знает, почему? Объясните пожалуйста.
PM MAIL   Вверх
dorogoyIV
Дата 5.4.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



попробуй setVisible(true); в последнюю очередь (в самом конце конструктора) (и repaint(); убери)
PM MAIL   Вверх
Flashed
Дата 5.4.2011, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(dorogoyIV @ 5.4.2011,  14:09)
попробуй setVisible(true); в последнюю очередь (в самом конце конструктора) (и repaint(); убери)

не помогло
Код

        import java.awt.Graphics; 
        import java.awt.Window; 
        import javax.swing.JFrame; 
        import javax.swing.JTextField; 
        import javax.swing.JWindow; 
          
          
        public class MyWindow extends JWindow{ 
          
            public MyWindow() 
            { 
                super(); 
                setSize(300,200); 
                setLayout(null); 
                  
                JTextField textField = new JTextField(); 
                textField.setBounds(30, 50, 100, 30); 
                add(textField); 
                //repaint(); 
                setVisible(true); 
            } 
            public void paint(Graphics _g) 
            { 
                super.paint(_g); 
            } 
            public static void main(String _s[]) 
            { 
                MyWindow mw= new MyWindow(); 
            } 
        }

PM MAIL   Вверх
jk1
Дата 5.4.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Чтобы иметь доступ к компоненту надо, чтобы он мог получить фокус. Есть такой метод Window.isFocusableWindow(), в его документации перечислено, какие условия необходимо соблюсти для того, чтобы компонент в окне мог получить фокус:
Цитата

Returns whether this Window can become the focused Window, that is,     
whether this Window or any of its subcomponents can become the focus    
owner. For a Frame or Dialog to be focusable, its focusable Window state
must be set to <code>true</code>. For a Window which is not a Frame or  
Dialog to be focusable, its focusable Window state must be set to       
<code>true</code>, its nearest owning Frame or Dialog must be           
showing on the screen, and it must contain at least one Component in    
its focus traversal cycle. If any of these conditions is not met, then  
neither this Window nor any of its subcomponents can become the focus   
owner.                                                                  


Как видно из описания, для JWindow ситуация сильно отличается от JFrame. 
Исходя из описания, я смог придумать только вот такую штуку:

Код

public class TestWindow extends JWindow {

    public TestWindow(JFrame frame) {
        super(frame);
        setSize(300, 200);
        setLayout(null);
        JTextField textField = new JTextField();
        textField.setBounds(30, 50, 100, 30);
        add(textField);
        this.setVisible(true);
        frame.setVisible(true);
    }

    public static void main(String _s[]) {
        TestWindow mw = new TestWindow(new JFrame());
    }
}



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Flashed
Дата 5.4.2011, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо. Тоесть  чтобы компонент в окне мог получить фокус, его владелец обязан быть видимым.  А можно тогда как-нибудь сделать JFrame без верхней панели?
PM MAIL   Вверх
jk1
Дата 5.4.2011, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Вот так

Код

JFrame jFrame = new JFrame();
jFrame.setUndecorated(true);



--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
Flashed
Дата 5.4.2011, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо

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

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

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


 




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


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

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