⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 datechooserpanel.java

📁 Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI
💻 JAVA
字号:
/*--------------------------------------------------------------------------*
 | Copyright (C) 2006  Christopher Kohlhaas                                 |
 |                                                                          |
 | This program is free software; you can redistribute it and/or modify     |
 | it under the terms of the GNU General Public License as published by the |
 | Free Software Foundation. A copy of the license has been included with   |
 | these distribution in the COPYING file, if not go to www.fsf.org         |
 |                                                                          |
 | As a special exception, you are granted the permissions to link this     |
 | program with every library, which license fulfills the Open Source       |
 | Definition as published by the Open Source Initiative (OSI).             |
 *--------------------------------------------------------------------------*/

package org.rapla.plugin.abstractcalendar;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;

import org.apache.avalon.framework.activity.Disposable;
import org.apache.avalon.framework.container.ContainerUtil;
import org.rapla.components.calendar.DateChangeEvent;
import org.rapla.components.calendar.DateChangeListener;
import org.rapla.components.calendar.RaplaArrowButton;
import org.rapla.components.calendar.RaplaCalendar;
import org.rapla.components.layout.TableLayout;
import org.rapla.entities.domain.Period;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.rapla.gui.CalendarModel;
import org.rapla.gui.RaplaGUIComponent;
import org.rapla.gui.internal.common.PeriodChooser;
import org.rapla.gui.toolkit.RaplaWidget;

public class DateChooserPanel extends RaplaGUIComponent
    implements
        Disposable
        ,RaplaWidget
{
    Collection listenerList = new ArrayList();

    JPanel panel = new JPanel();
    JButton prevButton = new RaplaArrowButton('<', 28);
    RaplaCalendar dateSelection;
    PeriodChooser periodChooser;
    JButton nextButton = new RaplaArrowButton('>', 28);
    int incrementSize = Calendar.WEEK_OF_YEAR;
    CalendarModel model;
    Listener listener = new Listener();

    public DateChooserPanel(RaplaContext sm, CalendarModel model) throws RaplaException {
        super( sm );
        boolean hasPeriodChooser = true;
        this.model = model;
        periodChooser = new PeriodChooser(getContext(),PeriodChooser.START_ONLY);
        dateSelection = createRaplaCalendar();

        //prevButton.setText("<");
        //nextButton.setText(">");
        double pre =TableLayout.PREFERRED;
        double[][] sizes = {{0.02,pre,5,pre,2,0.9,5,pre,0.02}
                            ,{0.5,pre,0.5}};
        TableLayout tableLayout = new TableLayout(sizes);
        panel.setLayout(tableLayout);
        panel.add(prevButton,"1,1");
        panel.add(dateSelection,"3,1");
        if ( hasPeriodChooser ) {
            panel.add(periodChooser,"5,1");
        }
        panel.add(nextButton,"7,1");
        periodChooser.setDate(getQuery().today());

        nextButton.addActionListener( listener );
        prevButton.addActionListener( listener);

        dateSelection.addDateChangeListener( listener);
        periodChooser.addActionListener( listener);

        update();
    }

    boolean listenersEnabled = true;
    public void update() throws RaplaException
    {
        listenersEnabled = false;
        try {
            periodChooser.setPeriodModel( getPeriodModel());
            if ( model.getSelectedDate() == null) {
                model.setSelectedDate( getQuery().today());
            }
            Date date = model.getSelectedDate();
            periodChooser.setDate( date);
            dateSelection.setDate( date);
        } finally {
            listenersEnabled = true;
        }
    }


    public void dispose() {
        periodChooser.removeActionListener( listener );
        ContainerUtil.dispose( periodChooser );
    }

    public void setNavigationVisible( boolean enable) {
        nextButton.setVisible( enable);
        prevButton.setVisible( enable);
    }

    /** possible values are Calendar.DATE, Calendar.WEEK_OF_YEAR, Calendar.MONTH and Calendar.YEAR.
        Default is Calendar.WEEK_OF_YEAR.
     */
    public void setIncrementSize(int incrementSize) {
        this.incrementSize = incrementSize;
    }

    /** registers new DateChangeListener for this component.
     *  An DateChangeEvent will be fired to every registered DateChangeListener
     *  when the a different date is selected.
     * @see DateChangeListener
     * @see DateChangeEvent
    */
    public void addDateChangeListener(DateChangeListener listener) {
        listenerList.add(listener);
    }

    /** removes a listener from this component.*/
    public void removeDateChangeListener(DateChangeListener listener) {
        listenerList.remove(listener);
    }

    public DateChangeListener[] getDateChangeListeners() {
        return (DateChangeListener[])listenerList.toArray(new DateChangeListener[]{});
    }

    /** An ActionEvent will be fired to every registered ActionListener
     *  when the a different date is selected.
    */
    protected void fireDateChange(Date date) {
        if (listenerList.size() == 0)
            return;
        DateChangeListener[] listeners = getDateChangeListeners();
        DateChangeEvent evt = new DateChangeEvent(this,date);
        for (int i = 0;i<listeners.length;i++) {
            listeners[i].dateChanged(evt);
        }
    }

    public JComponent getComponent() {
        return panel;
    }

    class Listener implements ActionListener, DateChangeListener {

        public void actionPerformed(ActionEvent evt) {
            if (!listenersEnabled)
                return;

            Date date;

            Calendar calendar = getRaplaLocale().createCalendar();
            calendar.setTime(dateSelection.getDate());

            if (evt.getSource() == prevButton) {
                calendar.add(incrementSize,-1);
            }
            if (evt.getSource() == nextButton) {
                calendar.add(incrementSize,1);
            }
            if (evt.getSource() == periodChooser) {
                date = periodChooser.getDate();
                Period period = periodChooser.getPeriod();
                model.setStartDate( period.getStart() );
                model.setEndDate( period.getEnd() );
            } else {
                date = calendar.getTime();
            }
            updateDates( date );
            fireDateChange( date);
        }

        public void dateChanged(DateChangeEvent evt) {
            if ( !listenersEnabled)
                return;
            try {
                listenersEnabled = false;
            } finally {
                listenersEnabled = true;
            }
            updateDates( evt.getDate());
            fireDateChange(evt.getDate());
        }

        private void updateDates(Date date) {
            try {
                listenersEnabled = false;
                model.setSelectedDate( date );
		// EXCO: It seems not nice to me that the start date
		// is in the parameter and the end date is extracted
		// from the model.
		// But, with this way, I am certain that
		// nothing can get broken.
                periodChooser.setDate( date, model.getEndDate() );
                dateSelection.setDate( date);
            } finally {
                listenersEnabled = true;
            }

        }


    }
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -