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

📄 intervallchooserpanel.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.Font;
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.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;

import org.rapla.components.calendar.DateChangeEvent;
import org.rapla.components.calendar.DateChangeListener;
import org.rapla.components.calendar.RaplaCalendar;
import org.rapla.components.layout.TableLayout;
import org.rapla.components.util.DateTools;
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 IntervallChooserPanel extends RaplaGUIComponent
    implements
    RaplaWidget
{
    Collection listenerList = new ArrayList();
    PeriodChooser periodChooser;

    JPanel panel = new JPanel();
    RaplaCalendar startDateSelection;
    RaplaCalendar endDateSelection;
    boolean listenersEnabled = true;
    CalendarModel model;
    Listener listener = new Listener();

    public IntervallChooserPanel(RaplaContext sm, CalendarModel model) throws RaplaException {
        super(sm);
        this.model = model;

        periodChooser = new PeriodChooser(getContext(),PeriodChooser.START_AND_END);
        periodChooser.setWeekOfPeriodVisible( false );

        startDateSelection = createRaplaCalendar();
        endDateSelection = createRaplaCalendar();
        //prevButton.setText("<");
        //nextButton.setText(">");
        double pre =TableLayout.PREFERRED;
        double[][] sizes = {{0.02,pre, 5, 0.9, 5,pre,0.02}
                            ,{1,9, pre,0.5}};
        TableLayout tableLayout = new TableLayout(sizes);
        panel.setLayout(tableLayout);
        JLabel startLabel =new JLabel( getString("start_date") +":");
        Font labelFont = startLabel.getFont().deriveFont( Font.PLAIN,(float) 10.0);
        JLabel endLabel = new JLabel( getString("end_date")  +":");
        startLabel.setFont( labelFont );
        endLabel.setFont( labelFont );
        panel.add( startLabel , "1,1");
        panel.add(startDateSelection,"1,2");
        panel.add( periodChooser,"3,2");
        periodChooser.addActionListener( listener );
        //panel.add(dateSelection,"3,1");
        panel.add( endLabel,"5,1");
        panel.add(endDateSelection,"5,2");

        startDateSelection.addDateChangeListener( listener );
        endDateSelection.addDateChangeListener( listener );
        update();
    }

    public void update() throws RaplaException
    {
        listenersEnabled = false;
        try {
            if ( model.getStartDate() == null) {
                model.setStartDate( getQuery().today());
            }
            if ( model.getEndDate() == null) {
                Calendar cal = getRaplaLocale().createCalendar();
                cal.setTime( model.getStartDate());
                cal.add( Calendar.YEAR, 1);
                model.setEndDate( cal.getTime());
            }
            if ( model.getSelectedDate() == null) {
                model.setSelectedDate( model.getStartDate() );
            }
            Date startDate =  model.getStartDate();
            startDateSelection.setDate( startDate);
            periodChooser.setDate( startDate );
            Date endDate = model.getEndDate();
            endDateSelection.setDate( DateTools.subDay(endDate));
        } finally {
            listenersEnabled = true;
        }
    }

    /** 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 DateChangeListener, ActionListener  {
        public void actionPerformed( ActionEvent e )
        {
            if ( !listenersEnabled )
                return;
            Period period = periodChooser.getPeriod();
            if ( period == null) {
                return;
            }
            updateDates( period.getStart(), period.getEnd());
            fireDateChange( period.getStart());
        }

        public void dateChanged(DateChangeEvent evt) {
            if ( !listenersEnabled )
                return;
            updateDates( startDateSelection.getDate(), DateTools.addDay(endDateSelection.getDate()));
            fireDateChange(evt.getDate());
        }

        private void updateDates(Date start, Date end) {
            try {
                listenersEnabled = false;
                model.setStartDate(  start);
                model.setEndDate( end );
                model.setSelectedDate( start );
 //               start
                startDateSelection.setDate( start);
                endDateSelection.setDate( end );
            } finally {
                listenersEnabled = true;
            }

        }
    }
}


⌨️ 快捷键说明

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