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

📄 swingtableview.java

📁 Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI
💻 JAVA
字号:
package org.rapla.plugin.tableview;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.lang.reflect.Method;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JComponent;
import javax.swing.JScrollPane;
import javax.swing.JTable;

import org.rapla.components.calendar.DateChangeEvent;
import org.rapla.components.calendar.DateChangeListener;
import org.rapla.components.iolayer.ComponentPrinter;
import org.rapla.components.tablesorter.TableSorter;
import org.rapla.entities.domain.Reservation;
import org.rapla.entities.domain.ReservationHelper;
import org.rapla.framework.RaplaContext;
import org.rapla.framework.RaplaException;
import org.rapla.gui.CalendarModel;
import org.rapla.gui.MenuContext;
import org.rapla.gui.MenuFactory;
import org.rapla.gui.RaplaGUIComponent;
import org.rapla.gui.SwingCalendarView;
import org.rapla.gui.internal.common.CalendarAction;
import org.rapla.gui.toolkit.DateCellRenderer;
import org.rapla.gui.toolkit.RaplaMenu;
import org.rapla.gui.toolkit.RaplaMenuItem;
import org.rapla.gui.toolkit.RaplaPopupMenu;
import org.rapla.plugin.abstractcalendar.IntervallChooserPanel;

public class SwingTableView extends RaplaGUIComponent implements SwingCalendarView, Printable
{
    ReservationTableModel reservationTableModel;

    JTable table;
    CalendarModel model;
    IntervallChooserPanel dateChooser;
    JComponent container;
    TableSorter sorter;

    public SwingTableView( RaplaContext context, CalendarModel model, final boolean editable ) throws RaplaException
    {
        super( context );
        table = new JTable() {
            private static final long serialVersionUID = 1L;
            
            public String getToolTipText(MouseEvent e) {
                if (!editable)
                    return null;
                int rowIndex = rowAtPoint( e.getPoint() );
                Reservation reservation = reservationTableModel.getReservationAt( sorter.modelIndex( rowIndex ));
                return getInfoFactory().getToolTip( reservation );
            }
        };
        if ( editable )
        {
            container = new JScrollPane( table);
            container.setPreferredSize( new Dimension(600,800));
        }
        else
        {
            container = table;
        }
        this.model = model;
        reservationTableModel = new ReservationTableModel( getLocale(),getI18n() );
        sorter =  new TableSorter( reservationTableModel, table.getTableHeader());
        table.setModel(  sorter );
        table.getColumnModel().getColumn(1  ).setCellRenderer( new DateCellRenderer( getRaplaLocale()));
        table.getColumnModel().getColumn(1  ).setMaxWidth( 120 );
        table.getColumnModel().getColumn(1  ).setPreferredWidth( 120 );
        table.getColumnModel().getColumn(2 ).setCellRenderer( new DateCellRenderer( getRaplaLocale()));
        table.getColumnModel().getColumn(2  ).setMaxWidth( 120 );
        table.getColumnModel().getColumn(2  ).setPreferredWidth( 120 );
        if ( editable ) {
            PopupTableHandler popupHandler = new PopupTableHandler();
            container.addMouseListener( popupHandler);
            table.addMouseListener( popupHandler );
        }

        dateChooser = new IntervallChooserPanel( context, model);
        dateChooser.addDateChangeListener( new DateChangeListener() {
            public void dateChanged( DateChangeEvent evt )
            {
                try {
                    update(  );
                } catch (RaplaException ex ){
                    showException( ex, getComponent());
                }
            }
        });

        reservationTableModel.setReservations( model.getReservations() );

        if ( !editable) 
        {
            Dimension size = table.getPreferredSize();
            container.setBounds( 0,0,(int)600, (int)size.getHeight());
        }

    }

    public void update() throws RaplaException
    {
        reservationTableModel.setReservations( model.getReservations() );
        dateChooser.update();
    }

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

    public void scrollToStart()
    {

    }

    public JComponent getComponent()
    {
    	return container;
    }

    List getSelectedEvents() {
        int[] rows = table.getSelectedRows();
        List selectedEvents = new ArrayList();
        for (int i=0;i<rows.length;i++)
        {
            Reservation reservation =reservationTableModel.getReservationAt( sorter.modelIndex(rows[i]) );
            selectedEvents.add( reservation);
        }
        return selectedEvents;
    }

    class PopupTableHandler extends MouseAdapter {

        void showPopup(MouseEvent me) {
            Point p = new Point(me.getX(), me.getY());
            List selectedEvents = getSelectedEvents();
            try {
                Object focusedObject = null;
                if ( selectedEvents.size() == 1) {
                    focusedObject = selectedEvents.get( 0);
                }
                MenuContext menuContext = new MenuContext( getContext(), focusedObject,getComponent(),p);
                menuContext.setSelectedObjects( selectedEvents);
                RaplaPopupMenu menu= new RaplaPopupMenu();

                // add the new reservations wizards
                RaplaMenu newMenu = new RaplaMenu("new");
                newMenu.setText(getString("new"));
                MenuFactory menuFactory = (MenuFactory) getService(MenuFactory.ROLE);
                menuFactory.addReservationWizards( newMenu, menuContext, null);
                menu.add( newMenu );
                
                RaplaMenuItem calendar = new RaplaMenuItem("calendar");
                CalendarModel model = (CalendarModel) getService(CalendarModel.ROLE);
                CalendarAction action = new CalendarAction( getContext(), getComponent(), model);
                action.changeObjects( selectedEvents);
                action.setStart( ReservationHelper.findFirst( selectedEvents ));
                calendar.setAction( action );
                menu.add( calendar );
                
                // add the edit methods
                menuFactory.addObjectMenu( menu, menuContext, null);
                menu.show( table, p.x, p.y);
            } catch (RaplaException ex) {
                showException (ex,getComponent());
            }
        }

        /** Implementation-specific. Should be private.*/
        public void mousePressed(MouseEvent me) {
            if (me.isPopupTrigger())
                showPopup(me);
        }
        /** Implementation-specific. Should be private.*/
        public void mouseReleased(MouseEvent me) {
            if (me.isPopupTrigger())
                showPopup(me);
        }
        /** we want to edit the reservation on double click*/
        public void mouseClicked(MouseEvent me) {
            List selectedEvents = getSelectedEvents();
            if (me.getClickCount() > 1  && selectedEvents.size() == 1 )
            {
                Reservation reservation = (Reservation) selectedEvents.get( 0);
                try {
                    getReservationController().edit( reservation );
                } catch (RaplaException ex) {
                    showException (ex,getComponent());
                }
            }
        }
    }

    private Object getFitWidthMode()
    {
        try {
            Class printMode = Class.forName("javax.swing.JTable$PrintMode");
            return  printMode.getField("FIT_WIDTH").get( null);
        } catch (Exception e) {
            return null;
        }
    }
    
    Printable printable = null;
    /**
     * @see java.awt.print.Printable#print(java.awt.Graphics, java.awt.print.PageFormat, int)
     */
    public int print(Graphics graphics, PageFormat format, int page) throws PrinterException {
        if ( page == 0) {
            // We use reflection to make the following call
            // this maintains 1.4 compatibilty 
            // printable = table.getPrintable( JTable.PrintMode.FIT_WIDTH,f1, null );
            Object FIT_WIDTH = getFitWidthMode();
            if ( FIT_WIDTH == null)
            {
                printable = new ComponentPrinter( container, true);
            }
            else
            {
                MessageFormat f1 = new MessageFormat( model.getNonEmptyTitle());
                try
                {
                    Method getPrintableMethod = JTable.class.getMethod("getPrintable", new Class[] {FIT_WIDTH.getClass(),MessageFormat.class, MessageFormat.class});
                    printable = (Printable)getPrintableMethod.invoke( table, new Object[] {FIT_WIDTH,f1, null });
                } catch (Exception ex)
                {
                    throw new PrinterException("Can't get printable of table " + ex.getMessage());
                }
            }
        }
        return printable.print( graphics, format, page);
    }


 }

⌨️ 快捷键说明

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