我的用java做的日历,图如上,
当改变年时间的时候,不能使下面的日历改变,具体要调用jlist的哪几个方法,才能使日历改变;
就像电脑自带的日历一样class DatePanel extends JPanel implements ActionListener
{
MenologyPanel mpanel=null;//我自己定义的一个panel可以打印日历的panel
JPanel panel=null;
int year=2011,month=1;
JComboBox jcb1;
JList jlist;
JScrollPane jsp;
String str2[]={"一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"};
String str1[];
public DatePanel()
{
str1=new String[120];
for(int i=0;i<120;i++){
str1[i]=new String((1980+i)+"");
}
this.setLayout(new BorderLayout());
panel=new JPanel();
panel.setLayout(new GridLayout(1,2,50,0));

jcb1=new JComboBox(str2);
jlist=new JList(str1);
jsp=new JScrollPane(jlist);
jlist.setVisibleRowCount(1);
jlist.setSelectedIndex(31);
// jlist.addAncestorListener(this);
jcb1.setBorder(BorderFactory.createMatteBorder(0, 10, 0, 10,jcb1.getBackground()));
//jsp.setBorder(BorderFactory.createMatteBorder(0, 10,0, 10, jsp.getBackground()));
jcb1.addActionListener(this);
panel.add(jcb1);
panel.add(jsp);
this.add(panel,BorderLayout.NORTH);
mpanel=new MenologyPanel(year,month);
mpanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createMatteBorder(10, 10, 10, 10, mpanel.getBackground()),
BorderFactory.createBevelBorder(BevelBorder.LOWERED)));

add(mpanel,BorderLayout.CENTER);
}

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
int i=jcb1.getSelectedIndex();
month=i+1;
try {
this.remove(mpanel);
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
mpanel=new MenologyPanel(year,month);
mpanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createMatteBorder(10, 10, 10, 10, mpanel.getBackground()),
BorderFactory.createBevelBorder(BevelBorder.LOWERED)));
add(mpanel,BorderLayout.CENTER);
this.validate();//重新设置定位
}
}

解决方案 »

  1.   

    显示 年 那个组件换成 JSpinner 吧。 然后使用 ChangeListener 改变下面的 月
      

  2.   

    但用了 JSpinner 还是不会具体的类的方法,在网上也找了一下,没有可以可行的方法。
      

  3.   

    ChangeListener listener =new ChangeListener(){ 
    @Override
    public void stateChanged(ChangeEvent e) {
    // TODO Auto-generated method stub
    SpinnerModel source = null;
    try {
    source = ((SpinnerModel)e.getSource());
    } catch (Exception e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();

    System.out.println( "The   value   is:   "   +   source.getNextValue());  //year=Integer.parseInt(source.getValue().toString());

            }; 还会出现这样的异常java.lang.ClassCastException: javax.swing.JSpinner cannot be cast to javax.swing.SpinnerModel
    at com.Menology.DatePanel$1.stateChanged(TestMenology.java:242)
    at javax.swing.JSpinner.fireStateChanged(Unknown Source)
    at javax.swing.JSpinner$ModelListener.stateChanged(Unknown Source)
    at javax.swing.AbstractSpinnerModel.fireStateChanged(Unknown Source)
    at javax.swing.SpinnerListModel.setValue(Unknown Source)
    at javax.swing.JSpinner.setValue(Unknown Source)
    at javax.swing.plaf.basic.BasicSpinnerUI$ArrowButtonHandler.actionPerformed(Unknown Source)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at com.Menology.DatePanel$1.stateChanged(TestMenology.java:247)
    at javax.swing.JSpinner.fireStateChanged(Unknown Source)
    at javax.swing.JSpinner$ModelListener.stateChanged(Unknown Source)
    at javax.swing.AbstractSpinnerModel.fireStateChanged(Unknown Source)
    at javax.swing.SpinnerListModel.setValue(Unknown Source)
    at javax.swing.JSpinner.setValue(Unknown Source)
    at javax.swing.plaf.basic.BasicSpinnerUI$ArrowButtonHandler.actionPerformed(Unknown Source)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
      

  4.   

    SpinnerNumberModel model = new SpinnerNumberModel(2011,1900,2100,1);
    JSpinner spinner = new JSpinner(model);
    spinner.addChangeListener(new ChangeListener(){
        public void stateChanged(ChangeEvent e){
            JSpinner spinner = (JSpinner)e.getSource();
            int year = ((Integer)spinner.getValue()).intValue();
            ...
        }
    });