📄 abstractraplaswingcalendar.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 + -