Подтвердить что ты не робот

Настройка фокуса на текстовое поле

У меня есть приложение, разработанное в netbeans, и я хочу установить фокус на определенный jTextField при отображении панели. Я прочитал несколько сообщений и попробовал разные методы, но не работал. Одна из основных проблем заключается в том, где разместить требуемый код, который, я считаю, в моем случае this.txtMessage.requestFocusInWindow();

Есть несколько сообщений, которые указывают использование Listener, но поскольку netbeans сгенерировал GUI, я не вижу, как реализовать интерфейсы, поскольку я не могу редактировать код, который создает jPANEL и т.д. Все это очень расстраивает, и я действительно не верю, что это должно быть так сложно.

В качестве теста я добавил кнопку requestFocusInWindow(); к кнопке на панели, и она установила фокус на желаемый вход.

4b9b3361

Ответ 1

У меня был аналогичный сценарий, когда мне нужно было сосредоточиться на текстовом поле внутри панели, когда была показана панель. Панель была загружена при запуске приложения, поэтому я не мог установить фокус в конструкторе. Поскольку панель не загружалась или не фокусировалась на шоу, это означало, что у меня не было никакого события, чтобы запустить запрос фокуса.

Чтобы решить эту проблему, я добавил глобальный метод, который вызвал метод в панели, который вызывал requestFocusInWindow() в текстовой области. Я поместил вызов глобальному методу в кнопку, которая показала панель, после вызова, чтобы показать. Это означало, что панель будет показана, а затем текстовая область назначила фокус после отображения панели. Надеюсь, что это имеет смысл и помогает!

Кроме того, вы можете отредактировать большую часть автоматически сгенерированного кода, щелкнув правой кнопкой мыши на объекте в представлении дизайна и выбрав индивидуальный код, однако я не думаю, что он позволяет редактировать панели.

Ответ 2

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

В Netbeans просто нажмите кнопку "Источник" в левом верхнем углу окна редактора, и вы можете редактировать большую часть кода. Фактический код компоновки в основном заблокирован, но вы можете даже настроить его, если вам нужно.

Насколько мне известно, txtMessage.requestFocusInWindow() должен настроить фокус по умолчанию, когда окно отображается в первый раз. Если вы хотите запросить фокус после того, как окно уже было отображено, вы должны использовать txtMessage.requestFocus()

Для тестирования вы можете просто добавить слушателя в конструктор:

addWindowListener(new WindowAdapter(){ 
  public void windowOpened( WindowEvent e){ 
    txtMessage.requestFocus();
  } 
}); 

Ответ 3

В JFrame или JDialog вы всегда можете перезаписать метод setVisible(), он работает хорошо. Я не пробовал в JPanel, но может быть альтернативой.

@Override
public void setVisible(boolean value) {
    super.setVisible(value);
    control.requestFocusInWindow();
}

Ответ 4

Я играл с этим навсегда и, наконец, нашел то, что, кажется, всегда работает!

    textField = new JTextField() {

        public void addNotify() {
            super.addNotify();
            requestFocus();
        }
    };

Ответ 5

Я сделал это, установив событие AncesterAdded на textField и запрашивающий фокус в окне.

Ответ 6

Для меня самый простой способ заставить его работать: положить строку component.requestFocus(); после строки setVisible(true); в нижней части вашего фрейма или конструктора панели.

Вероятно, это связано с запросом фокуса, поскольку все компоненты были созданы, потому что создание нового компонента после запроса запроса фокуса сделает ваш компонент незаметным и сосредоточит внимание на вашем вновь созданный компонент. По крайней мере, это то, что я предполагаю.

Ответ 7

Ни одно из вышеперечисленных не работало для меня, потому что мое окно - JPopupMenu.

Что это за работа:

addAncestorListener(new AncestorListener() {
    @Override
    public void ancestorAdded(AncestorEvent ae) {
        myEdit.requestFocus();
    }

    // ... other ancestor listener methods
}

Ответ 8

Если вы создаете графический интерфейс с Netbeans, вы также можете вставить код самостоятельно. Просто выберите элемент (возможно, кнопку, панель или окно) и используйте "Код" -tab в диалоговом окне "Свойства".

Здесь вы можете вставлять Pre- и Post-code для различных частей процесса создания.

Я думаю, что поле "After-All-Set-Code" окна является хорошим местом для вашего кода, или вы можете привязать его к событию ( "Свойства" -диалог → "События" ) " componentShown" текстового поля/панели.

Ответ 9

Это легко:

textField.setFocus();