SwingX - personaliseer JXDatePicker

Ik wil de JXDatePicker personaliseren. Meer specifiek wil ik een eigen actieknop maken op een eigen positie. Ik heb geprobeerd de meegeleverde JButton uit te pakken, maar wanneer ik het aan een JPanel probeer toe te voegen, voegt het alleen lege ruimte toe.

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

Ik denk niet dat deze aanpak sowieso zou werken, maar op dit moment weet ik niet beter. Suggesties?

3
Hmm ... kun je JXDatePicker uitbreiden? Of misschien kun je het lef trekken met een aanroep van getContentPane() of een vergelijkbare methode? Echt, het antwoord kan gewoon zijn dat je het niet kunt.
toegevoegd de auteur Nate W., de bron
waarom? Oké, oke, het ziet er niet al te leuk uit, ik weet het :-) Het wordt niet ondersteund, om te veranderen moet je je eigen DatePickerUI schrijven - bekijk de Basic * implementatie voor ideeën
toegevoegd de auteur kleopatra, de bron
kijk naar de bron van BasicDatePickerUI
toegevoegd de auteur kleopatra, de bron
@kleopatra ja de look komt niet overeen met mijn andere componenten :) Waar kan ik de basisimplementatie vinden? Ik probeerde de broncode van de JXDatePicker te begrijpen, maar kon niets vinden over de knop java2s.com/Open-Source/Java-Document/Swing-Library/swingx/or‌ g/& hellip;
toegevoegd de auteur Anthea, de bron

2 antwoord

vond een werkende oplossing, zou niet de schoonste manier zijn:

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);

Ik heb de datum Btn ergens anders in mijn mening toegevoegd.

2
toegevoegd
((JButton) startDatePicker.getComponent(1)).setIcon(new ImageIcon(((new ImageIcon(getClass().getResource("/images/calendar.png"))).getImage()).getScaledInstance(20, 20, java.awt.Image.SCALE_SMOOTH)));
1
toegevoegd