SwingX — персонализируйте JXDatePicker

Я хочу персонализировать JXDatePicker. В частности, я хочу создать собственную кнопку действия на собственной позиции. Я попытался извлечь включенный JButton, но когда я пытаюсь добавить его в любую панель JPanel, он только добавляет пустое пространство.

JXDatePicker fDate = new JXDatePicker(new Date());
fDate.getEditor().setBorder(null);
fDate.getEditor().setEditable(false);
JButton eDate = (JButton) fDate.getComponent(1);
fDate.remove(eDate);

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


person Anthea    schedule 06.12.2011    source источник
comment
Хм... не могли бы вы продлить JXDatePicker? Или, возможно, вы можете вытащить его кишки с помощью вызова getContentPane() или другого подобного метода? На самом деле ответ может заключаться в том, что вы не можете.   -  person Nate W.    schedule 07.12.2011
comment
Зачем? Ладно, ладно, это выглядит не слишком красиво, я знаю :-) Это не поддерживается, чтобы изменить, вам придется написать свой собственный DatePickerUI - посмотрите на реализацию Basic* для идей   -  person kleopatra    schedule 07.12.2011
comment
@kleopatra да, внешний вид не соответствует другим моим компонентам :) Где я могу найти базовую реализацию? Я пытался понять исходный код JXDatePicker, но ничего не нашел о кнопке java2s.com/Open-Source/Java-Document/Swing-Library/swingx/org/   -  person Anthea    schedule 07.12.2011
comment
посмотрите источник BasicDatePickerUI   -  person kleopatra    schedule 07.12.2011


Ответы (1)


нашел рабочее решение, возможно, это не самый чистый способ:

JXDatePicker fDate = new JXDatePicker(new Date());

//edit the Textfield
fDate.getEditor().setBorder(null);
fDate.getEditor().setEditable(false);

//edit the Button
JButton dateBtn= (JButton) fDate.getComponent(1);
Image editImage  =Toolkit.getDefaultToolkit().getImage(getClass().getResource("/toolbarButtonGraphics/general/Edit16.gif"));

dateBtn.remove(eDate);  
dateBtn.setIcon(new ImageIcon(editImage));
dateBtn.setFocusPainted(false);
dateBtn.setMargin(new Insets(0, 0, 0, 0));
dateBtn.setContentAreaFilled(false);
dateBtn.setBorderPainted(false);
dateBtn.setOpaque(false);

Я добавил dateBtn где-то еще, на мой взгляд.

person Anthea    schedule 07.12.2011