Как выбрать весь текст в JFormattedTextField, когда это получает фокус?

Я действительно считаю, что следующий код работает с использованием Chrome, а не других браузеров, кроме выбранного в данный момент ответа:

.v-center {
    display:table!important; height:125px;
}

.v-center div[class*='col-'] {
   display: table-cell!important;
   vertical-align:middle;
   float:none;
}
.v-center img {
   max-height:125px;
}

Bootply Link

Возможно, вам придется изменить высоты (в частности, на .v-center) и удалите / измените div на div[class*='col-'] для ваших нужд.

33
задан Robert Petermeier 24 July 2009 в 15:09
поделиться

4 ответа

Завершите вызов с помощью SwingUtilities.invokeLater, чтобы это произошло после обработки всех ожидающих событий AWT:

pricePerLiter.addFocusListener(new java.awt.event.FocusAdapter() {
    public void focusGained(java.awt.event.FocusEvent evt) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                pricePerLiter.selectAll();
            }
        });
    }
});
66
ответ дан 27 November 2019 в 17:38
поделиться

В дополнение к вышесказанному, если вы хотите, чтобы это было для всех текстовых полей, вы можете просто сделать:

KeyboardFocusManager.getCurrentKeyboardFocusManager()
    .addPropertyChangeListener("permanentFocusOwner", new PropertyChangeListener()
{
    public void propertyChange(final PropertyChangeEvent e)
    {
        if (e.getNewValue() instanceof JTextField)
        {
            SwingUtilities.invokeLater(new Runnable()
            {
                public void run()
                {
                    JTextField textField = (JTextField)e.getNewValue();
                    textField.selectAll();
                }
            });

        }
    }
});
14
ответ дан 27 November 2019 в 17:38
поделиться

Это потому, что JFormattedTextfield переопределяет processFocusEvent для форматирования при получении / потере фокуса.

Один верный способ - расширить JFormattedTextField и переопределить метод processFocusEvent:

new JFormattedTextField("...") {  
        protected void processFocusEvent(FocusEvent e) {  
            super.processFocusEvent(e);  
            if (e.isTemporary())  
                return;  
            SwingUtilities.invokeLater(new Runnable() {  
                @Override  
                public void run() {  
                    selectAll();  
                }   
            });  
        }  
    };

Использование focusListener может не всегда работает ... поскольку это будет зависеть от времени, в которое он вызывается, относительно processFocusEvent.

6
ответ дан 27 November 2019 в 17:38
поделиться

Код camickr можно немного улучшить. Когда фокус переходит от JTextField к другому типу компонента (например, кнопке), последний автоматический выбор не очищается. Это можно исправить так:

    KeyboardFocusManager.getCurrentKeyboardFocusManager()
        .addPropertyChangeListener("permanentFocusOwner", new PropertyChangeListener()
    {
        @Override
        public void propertyChange(final PropertyChangeEvent e)
        {

            if (e.getOldValue() instanceof JTextField)
            {
                    SwingUtilities.invokeLater(new Runnable()
                    {
                            @Override
                            public void run()
                            {
                                    JTextField oldTextField = (JTextField)e.getOldValue();
                                    oldTextField.setSelectionStart(0);
                                    oldTextField.setSelectionEnd(0);
                            }
                    });

            }

            if (e.getNewValue() instanceof JTextField)
            {
                    SwingUtilities.invokeLater(new Runnable()
                    {
                            @Override
                            public void run()
                            {
                                    JTextField textField = (JTextField)e.getNewValue();
                                    textField.selectAll();
                            }
                    });

            }
        }
    });
2
ответ дан 27 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: