2015-06-01 7 views
0

Я хочу выполнить некоторую функцию в FocusEvent от JDatePicker. Я использую ниже код для реализации FocusListener.Как я могу реализовать FocusListener JDatePicker?

Properties p = new Properties(); 
p.put("text.today", "Today"); 
p.put("text.month", "Month"); 
p.put("text.year", "Year"); 
UtilDateModel model = new UtilDateModel(); 
Calendar today=Calendar.getInstance(); 
Date todayDate=new Date(); 
today.setTime(todayDate); 
model.setDate(today.get(Calendar.YEAR), today.get(Calendar.MONTH), today.get(Calendar.DATE)); 
model.setSelected(true); 
JDatePanelImpl datePanel =new JDatePanelImpl(model, p); 
JDatePickerImpl datePicker = new JDatePickerImpl(datePanel,new DateLabelFormatter()); 

datePicker.addFocusListener(new FocusListener() { 

    @Override 
    public void focusLost(FocusEvent e) { 
     // TODO Auto-generated method stub 
     System.out.println("fcus lost"); 
    } 

    @Override 
    public void focusGained(FocusEvent e) { 
     // TODO Auto-generated method stub 
     System.out.println("focus gained"); 
     SwingUtilities.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       //repaint(); 
       displayImage(categoryAttributeObj,imGroupObj); 
      } 

     }); 
    } 
}); 

Этот код не работает. Есть ли ошибка в этом коде?

+0

* «Я любая ошибка в этом коде» * - Действительно, как что? – MadProgrammer

+1

Возможно, вместо того, чтобы пытаться прослушать событие смены фокуса, вы должны приложить 'ChangeListener' к модели – MadProgrammer

+0

. Я использую jdatepicker.1.3.4.jar для реализации datepicker.Is changeListener доступен в этом классе JDatePicker – User123

ответ

1

Я не являюсь частным поклонником JDatePicker по ряду личных причин.

Вы могли бы реализовать свою собственную версию, которая условии, что вы с функциональностью ваш после или вы могли бы попробовать SwingLabs, SwingX JXDatePicker вместо этого, например

import java.awt.Dimension; 
import java.awt.EventQueue; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.event.FocusAdapter; 
import java.awt.event.FocusEvent; 
import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 
import org.jdesktop.swingx.JXDatePicker; 

public class Main { 

    public static void main(String[] args) { 
     new Main(); 
    } 

    public Main() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) { 
        ex.printStackTrace(); 
       } 

       JFrame frame = new JFrame("Testing"); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.add(new TestPane()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 
     }); 
    } 

    public class TestPane extends JPanel { 

     public TestPane() { 
      add(new JButton("Before")); 
      JXDatePicker picker = new JXDatePicker(); 
      picker.getEditor().addFocusListener(new FocusAdapter() { 
       @Override 
       public void focusGained(FocusEvent e) { 
        System.out.println("You have foucs"); 
       } 
      }); 
      add(picker); 
      add(new JButton("After")); 
     } 

    } 
} 
+0

Свойство (изменение) Поддержка/прослушиватель – mKorbel

+0

@mKorbel К чему? 'PropertyChangeListener' примерно так же хорош, как добавление' ChangeListener' в 'UtilDateModel' для' JDatePicker', который мы установили, недостаточно для потребностей OP – MadProgrammer

+0

есть/реализовано свойство (Изменить) Поддержка/прослушиватель, потому что причина для добавления FocusListener к выведенному JSpinner/JFormattedTextField, может быть, только если значение изменится, то это причина для запуска события, – mKorbel

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