2014-01-20 1 views
0

Нечего добавить в вопрос Title.Как я могу создать объект JSpinner для выделения всего содержимого, чтобы пользовательский ввод не требовал удаления при получении фокуса?

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

enter image description here

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

enter image description here

я могу сделать это для JTextField как так, например:

txtDateFrom.select(0,99); 

Но .select() это не метод для JSpinner.

(я понимаю, что это поднимает вопрос, «Зачем использовать вертушку?», Но очевидный ответ, что я хотел бы как методы выбора будут доступны, как это часто бывает в дизайне.)

(Гораздо менее прессовый, но связанный с этим вопрос ... Я сделал целочисленный массив из 100 лет [например, 2014] с именем years и использовал SpinnerListModel(years), потому что при использовании SpinnerNumberModel год будет отображаться как 2 014. Я могу жить с что я сделал, но есть ли способ менее грубой силы? Нет метода, содержащего «формат», который я мог бы найти для этого метода.)

+0

Если я использую 'JTextField', который был инициализирован, например,' 01/18/2014', Java сделала его очень удобным для пользователя, дважды щелкнув «мм» или «dd» или « yyyy "в поле mm/dd/yyyy выделяет эту часть, так что пользовательский ввод перезаписывает выбор без необходимости удаления - например, 01 /' 18'/2014. Я могу вернуться к этому, если нет относительно легкого решения моей проблемы, как указано выше. – DSlomer64

+2

Я думаю, что ваша проблема хорошо описана в этом возможном дубликате [Make JSpinner Select Text When Focused] (http://stackoverflow.com/questions/15328185/make-jspinner-select-text-when-focused). Также одно из решений, вероятно, сработает для вас. –

+0

@ HovercraftFullOfEels - Вы правы, что это дубликат. Предложения по ссылке сложны и трудно следовать, поэтому я буду изучать их более тщательно. Похоже, что нужно пройти такую ​​общую потребность. Я могу согласиться на двухстрочное примечание VGR, так как мой метод 3-spinner выглядит детским и прост в реализации, как есть. – DSlomer64

ответ

1

Thi работает в Java 1.7.0_51, в Windows и Linux. У меня нет возможности проверить его в OS X.

JSpinner.DefaultEditor editor = 
    (JSpinner.DefaultEditor) spinner.getEditor(); 

editor.getTextField().addFocusListener(new FocusAdapter() { 
    @Override 
    public void focusGained(FocusEvent event) { 
     final JTextField textField = (JTextField) event.getComponent(); 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       EventQueue.invokeLater(new Runnable() { 
        public void run() { 
         textField.selectAll(); 
        } 
       }); 
      } 
     }); 
    } 
}); 

Side Примечание: Вы рассматривали ли заменить свои три JSpinners с одним JSpinner, как это?

JSpinner spinner = new JSpinner(new SpinnerDateModel()); 
spinner.setEditor(new JSpinner.DateEditor(spinner, "MM/dd/yyyy")); 

Кнопки со стрелками вверх и вниз (и стрелки) будут меняться в зависимости от того, какое поле содержит текстовый курсор.

Это не решит вашу проблему с фокусом, но вы можете решить, что проблема не является проблемой.

+0

@ VGR - Я новичок в редакторах, поэтому мне нужно будет немного поискать и прочитать, но я планирую попробовать вашу «линию» с двумя строками. Благодарю. – DSlomer64

+0

Это не заняло много времени - мне нравится это лучше, чем мои 3-х вратаря FAR! Так что двойное спасибо. Мне все еще нужно прочитать о .setEditor и т. Д. Я нашел его вчера вечером в тексте, но пример не был двумя строками, поэтому я отложил его. Ваши две линии - находка. – DSlomer64

+0

P.S. Я был разочарован тем, что получил исключение null-указателя, но с облегчением понял, что это было так легко исправлено: 'spinner.setValue (new Date());' ... Это ставит сегодняшнюю дату в качестве значения по умолчанию: 01/20/2014 #, где «#» - это объекты с вертикальным расширением. – DSlomer64

Смежные вопросы