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

📄 abstractraplaswingcalendar.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.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.util.Date;

import javax.swing.BorderFactory;
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.calendarview.CalendarView;
import org.rapla.components.calendarview.swing.AbstractSwingCalendar;
import org.rapla.components.calendarview.swing.ViewListener;
import org.rapla.components.iolayer.ComponentPrinter;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.rapla.gui.CalendarModel;
import org.rapla.gui.RaplaGUIComponent;
import org.rapla.gui.SwingCalendarView;
import org.rapla.gui.toolkit.RaplaWidget;


public abstract class AbstractRaplaSwingCalendar extends RaplaGUIComponent
    implements
    RaplaWidget, SwingCalendarView,
    DateChangeListener,
    Printable
{
    protected final CalendarModel model;
    protected final AbstractSwingCalendar view;
    protected DateChooserPanel dateChooser;
    JComponent container;
    JLabel titleView;
    
    public AbstractRaplaSwingCalendar(RaplaContext sm,CalendarModel model, boolean editable) throws RaplaException {
        super( sm);
        this.model = model;

        view = createView( editable);
        view.setEditable(editable);
        view.setLocale( getRaplaLocale().getLocale() );
        view.setTimeZone(getRaplaLocale().getTimeZone());
        if ( editable )
        {
            view.addCalendarViewListener( createListener() );
            container = view;
        }
        else
        {
            container = new JPanel();
            container.setLayout( new BorderLayout());
            container.setOpaque( false );
            view.setOpaque( false);
            titleView = new JLabel();
            titleView.setFont(new Font("SansSerif", Font.BOLD, 14));
            titleView.setOpaque(false);
            titleView.setForeground(Color.black);
            //titleView.setHorizontalAlignment(JLabel.CENTER);
            titleView.setBorder(BorderFactory.createEmptyBorder(0,11,12,11));

            container.add( titleView, BorderLayout.NORTH);
            container.add( view, BorderLayout.CENTER);
        }

        dateChooser = new DateChooserPanel(getContext(), model);
        dateChooser.addDateChangeListener(this);
        dateChooser.setIncrementSize( getIncrementSize() );
        update();
    }

    abstract protected AbstractSwingCalendar createView(boolean editable);
    abstract protected void configureView() throws RaplaException;
    abstract public int getIncrementSize();

    protected ViewListener createListener() throws RaplaException {
        return new RaplaCalendarViewListener(getContext(), model, view);
    }

    public JComponent getDateSelection()   {
        return dateChooser.getComponent();
    }

    public void dateChanged(DateChangeEvent evt) {
        try {
            //model.setSelectedDate( dateChooser.getDate() );
            update();
        } catch (RaplaException ex) {
            showException(ex, view);
        }
    }

    public void update(  ) throws RaplaException {
        if ( titleView != null)
        {
            titleView.setText( model.getNonEmptyTitle());
        }
        dateChooser.update();
        configureView( );
        ensureViewTimeframeIsInModel(view.getStartDate(), view.getEndDate());
        view.rebuild( createBuilder() );
        if ( !view.isEditable())
        {
            Dimension size = view.getPreferredSize();
            container.setBounds( 0,0, size.width, size.height + 40);
        }
    }

    protected void ensureViewTimeframeIsInModel( Date startDate, Date endDate) {
        //      Update start- and enddate of the model
        Date modelStart = model.getStartDate();
        Date modelEnd = model.getEndDate();
        if ( modelStart == null || modelStart.after( startDate)) {
            model.setStartDate( startDate);
        }
        if ( modelEnd == null || modelEnd.before( endDate)) {
            model.setEndDate( endDate);
        }
    }

    protected RaplaBuilder createBuilder() throws RaplaException
    {
        RaplaBuilder builder = new SwingRaplaBuilder(getContext());
        builder.setRepeatingVisible( view.isEditable());
        builder.setEditingUser( getUser() );
        builder.setExceptionsExcluded( !getCalendarOptions().isExceptionsVisible() || !view.isEditable());
        builder.setFromModel( model, view.getStartDate(), view.getEndDate() );

        GroupAllocatablesStrategy strategy = new GroupAllocatablesStrategy( getRaplaLocale().getLocale() );
        boolean compactColumns = getCalendarOptions().isCompactColumns() ||  builder.getAllocatables().size() ==0 ;
        strategy.setFixedSlotsEnabled( !compactColumns);
        strategy.setResolveConflictsEnabled( true );
        builder.setBuildStrategy( strategy );
        return builder;
    }

    public JComponent getComponent()
    {
        return container;
    }

    public void scrollToStart()
    {
    }

    public CalendarView getCalendarView() {
        return view;
    }
    
    /**
     * @see java.awt.print.Printable#print(java.awt.Graphics, java.awt.print.PageFormat, int)
     */
    public int print(Graphics g, PageFormat format, int page) throws PrinterException {
        /*JFrame frame = new JFrame();
        frame.setSize(300,300);
        frame.getContentPane().add( container);
        frame.pack();
        frame.setVisible(false);*/
        ComponentPrinter comp = new ComponentPrinter( container, true);
        int result = comp.print( g, format, page);
        /*frame.getContentPane().remove( container);
        frame.dispose();*/
        return result;
    }


}

⌨️ 快捷键说明

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