2011-10-06 3 views
1

Мне нужно создать элементы управления JSpinner, где я могу обнаружить нажатия кнопок, , используя текущий внешний вид. Я обнаружил, что я могу сделать это достаточно легко следующим образом:Обнаружение событий кнопки JSpinner

class CustomSpinnerUI extends BasicSpinnerUI { 
    @Override 
    protected Component createNextButton() { 
     // Add custom ActionListener. 
    } 

    @Override 
    protected Component createPreviousButton() { 
     // Add custom ActionListener. 
    } 
} 

Проблема заключается в том, что, делая это, я в конечном итоге с противным вид блесны, которая не использует один и тот же вид и чувствовать себя, как и остальные мои UI. В настоящее время я использую Nimbus, но мне нужно поддерживать различные конфигурации L & F.

Я думал о возможности создания своего рода динамического прокси, но не смог найти подходящих интерфейсов Spinner, чтобы позволить мне это сделать.

Может ли кто-нибудь подумать об устранении проблемы? Я полагаю, что я либо нужно получить на кнопку ActionListeners без подклассов BasicSpinnerUI или разработать способ, чтобы мой CustomSpinnerUI использовать правильный L & F.

Edit: «вид по умолчанию и чувствовать себя» -> «текущий внешний вид и ».

+1

же вопрос всегда ... почему? – kleopatra

+0

У меня есть время и время, когда нужно разделить один и тот же экземпляр «Календарь». Это для сенсорного экрана, так что просто с одним прядильником слишком сложно. Если есть лучший способ подойти к проблеме, мне бы хотелось услышать предложения, но я хотел попытаться сохранить вопрос ясно ... – vaughandroid

+0

@Baqueta для Touch_Screen (я только изображение о приемлемом размере для пальца на ЖК-дисплее) было бы лучше смотреть для JFormattedTextField с Date/DateTime/Time Formatter и с двумя JButtons (один из остальных справа на правой стороне) с Icon, – mKorbel

ответ

5

грязный технический ответ (concededly вымышленных) проблемы «как для доступа к кнопкам для подключения в пользовательском ActionListener» является проходными детьми Вертушки и добавить слушатель к кнопкам, идентифицированных по имени:

JSpinner spinner = new JSpinner(); 
    Action action = new AbstractAction() { 

     @Override 
     public void actionPerformed(ActionEvent e) { 
      LOG.info("button " + ((Component) e.getSource()).getName()); 
     } 
    }; 
    for (Component child : spinner.getComponents()) { 
     if ("Spinner.nextButton".equals(child.getName())) { 
      ((JButton) child).addActionListener(action); 
     } 
     if ("Spinner.previousButton".equals(child.getName())) { 
      ((JButton) child).addActionListener(action); 
     } 
    } 
  • , что грязно, потому что она опирается на недокументированные детали реализации которой LAF может или не может уважать: металл, Nimbus делать; Win Doesnt (который я считаю оплошность, но это другая история :-)
  • это только технический, так как реальная проблема, кажется, где-то еще, судя по недавним комментарием по вопросу
+1

+1 возможно, что работа для некоторых из JCalendar, JDatePicker, наконец, для самого сложного SwingX-календаря – mKorbel

+0

Грязный ответ, но похоже, что я принимал неправильный подход к проблема в первую очередь ... – vaughandroid

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