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

📄 raplatime.java

📁 Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        if (listeners.length == 0)
            return;
        DateChangeEvent evt = new DateChangeEvent(this,date);
        for (int i = 0; i<listeners.length; i++) {
            listeners[i].dateChanged(evt);
        }
    }

    /** The popup-component will be created lazily.*/
    public JComponent getPopupComponent() {
        if (m_timeList == null) {
            m_timeList = new TimeList( m_rowsPerHour);
            m_timeList.setModel(m_timeModel,m_timeField.getOutputFormat());
            m_timeList.setFont( getFont() );
            if (m_visibleRowCount>=0)
                m_timeList.getList().setVisibleRowCount(m_visibleRowCount);
        }
        m_timeList.setTimeRenderer( m_renderer );
        return m_timeList;
    }

    public void setTimeRenderer(TimeRenderer renderer) {
        m_renderer = renderer;
    }

}


class TimeList extends JPanel implements MenuElement,MouseListener,MouseMotionListener {
    private static final long serialVersionUID = 1L;

    JScrollPane scrollPane = new JScrollPane();
    NavButton upButton = new NavButton('^',10);
    NavButton downButton = new NavButton('v',10);
    JList m_list;
    DateFormat m_format;
    TimeModel m_timeModel;
    int m_rowsPerHour = 4;
    int m_minutesPerRow = 60 / m_rowsPerHour;;
    TimeRenderer m_renderer;

    private double getRowHeight() {
        return m_list.getVisibleRect().getHeight()/m_list.getVisibleRowCount();
    }
    
    public TimeList(int rowsPerHour) {
        super();
        this.setLayout( new BorderLayout());
        JPanel upPane = new JPanel();
        upPane.setLayout( new BorderLayout());
        upPane.add( upButton, BorderLayout.CENTER );
        JPanel downPane = new JPanel();
        downPane.setLayout( new BorderLayout());
        downPane.add( downButton, BorderLayout.CENTER );
        upButton.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent e )
            {
                int direction = (int)- getRowHeight() * (m_list.getVisibleRowCount() -1);
                JScrollBar bar = scrollPane.getVerticalScrollBar();
                int value = Math.min( Math.max( 0, bar.getValue() + direction ), bar.getMaximum());
                scrollPane.getVerticalScrollBar().setValue( value );
            }
            
        });
        downButton.addActionListener( new ActionListener() {
            public void actionPerformed( ActionEvent e )
            {
                int direction = (int) getRowHeight() * (m_list.getVisibleRowCount() -1) ;
                JScrollBar bar = scrollPane.getVerticalScrollBar();
                int value = Math.min( Math.max( 0, bar.getValue() + direction ), bar.getMaximum());
                scrollPane.getVerticalScrollBar().setValue( value );
            }
            
        });
        
        /*
        upPane.addMouseListener( new Mover( -1));
        upButton.addMouseListener( new Mover( -1));
        downPane.addMouseListener( new Mover( 1));
        downButton.addMouseListener( new Mover( 1));
        */
        //upPane.setPreferredSize( new Dimension(0,0));
        //downPane.setPreferredSize( new Dimension(0,0));
        this.add(upPane, BorderLayout.NORTH);
        this.add( scrollPane, BorderLayout.CENTER);
        this.add( downPane, BorderLayout.SOUTH);
        scrollPane.setVerticalScrollBarPolicy( JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER );
        scrollPane.getVerticalScrollBar().setEnabled( false );
        scrollPane.getVerticalScrollBar().setSize( new Dimension(0,0));
        scrollPane.getVerticalScrollBar().setPreferredSize( new Dimension(0,0));
        scrollPane.getVerticalScrollBar().setMaximumSize( new Dimension(0,0));
        scrollPane.getVerticalScrollBar().setMinimumSize( new Dimension(0,0));
        m_rowsPerHour = rowsPerHour;
        m_minutesPerRow = 60 / m_rowsPerHour;
        //this.setLayout(new BorderLayout());
        m_list = new JList();
        scrollPane.setViewportView( m_list);
        m_list.setBackground(this.getBackground());
        //JScrollPane scrollPane = new JScrollPane(m_list, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
        m_list.setVisibleRowCount(8);
        m_list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        m_list.addMouseListener(this);
        m_list.addMouseMotionListener(this);
        m_list.setCellRenderer( new DefaultListCellRenderer() {
            private static final long serialVersionUID = 1L;

            public Component getListCellRendererComponent( JList list, Object value, int index, boolean isSelected, boolean cellHasFocus )
            {
                Component component = super.getListCellRendererComponent( list, value, index, isSelected,cellHasFocus );
                if ( m_renderer!= null && !isSelected && !cellHasFocus ) {
                    int hour = getHourForIndex( index );
                    int minute = getMinuteForIndex( index );
                    Color color = m_renderer.getBackgroundColor( hour, minute );
                    if ( color != null ) {
                        component.setBackground( color );
                    }
                }
                return component;
            }
        });
    }

    public void setModel(TimeModel model,DateFormat format) {
        m_timeModel = model;
        m_format = (DateFormat) format.clone();
        Calendar calendar = Calendar.getInstance(m_format.getTimeZone(),model.getLocale());
        DefaultListModel listModel = new DefaultListModel();
        for (int i=0;i<24 * m_rowsPerHour;i++) {
            calendar.set(Calendar.HOUR_OF_DAY,i/m_rowsPerHour );
            calendar.set(Calendar.MINUTE,(i%m_rowsPerHour) * m_minutesPerRow);
            listModel.addElement("  " + m_format.format(calendar.getTime()) + "  ");
        }
        m_list.setModel(listModel);
        int pos = (int)getPreferredSize().getWidth()/2 - 5;
        upButton.setLeftPosition(  pos);
        downButton.setLeftPosition( pos );
    }

    public void setTimeRenderer(TimeRenderer renderer) {
        m_renderer = renderer;
    }

    public JList getList() {
        return m_list;
    }

    public void setFont(Font font) {
        super.setFont(font);
        if (m_list == null || font == null)
            return;
        m_list.setFont(font);
        int pos = (int)getPreferredSize().getWidth()/2 - 5;
        upButton.setLeftPosition(  pos);
        downButton.setLeftPosition( pos );
    }

    /** Implementation-specific. Should be private.*/
    public void mousePressed(MouseEvent e) {
            ok();
    }
    /** Implementation-specific. Should be private.*/
    public void mouseClicked(MouseEvent e) {
    }
    /** Implementation-specific. Should be private.*/
    public void mouseReleased(MouseEvent e) {
    }
    /** Implementation-specific. Should be private.*/
    public void mouseEntered(MouseEvent me) {
    }
    /** Implementation-specific. Should be private.*/
    public void mouseExited(MouseEvent me) {
    }


    private int lastIndex = -1;
    private int lastY= -1;
    public void mouseDragged(MouseEvent e) {
    }
    public void mouseMoved(MouseEvent e) {
        if (e.getY() == lastY)
            return;
        lastY = e.getY();
        Point p = new Point(e.getX(),e.getY());
        int index = m_list.locationToIndex(p);
        if (index == lastIndex)
            return;
        lastIndex = index;
        m_list.setSelectedIndex(index);
    }

    public void selectTime(Date time) {
        Calendar calendar = Calendar.getInstance(m_timeModel.getTimeZone(),m_timeModel.getLocale());
        calendar.setTime(time);
        int index = (calendar.get(Calendar.HOUR_OF_DAY))  * m_rowsPerHour
            + (calendar.get(Calendar.MINUTE) / m_minutesPerRow);
        select(index);
    }


    private void select(int index) {
        m_list.setSelectedIndex(index);
        m_list.ensureIndexIsVisible(Math.max(index -3,0));
        m_list.ensureIndexIsVisible(Math.min(index + 3,m_list.getModel().getSize() -1));
    }


    // Start of MenuElement implementation
    public Component getComponent() {
        return this;
    }
    public MenuElement[] getSubElements() {
        return new MenuElement[0];
    }

    public void menuSelectionChanged(boolean isIncluded) {
    }

    public void processKeyEvent(KeyEvent event, MenuElement[] path, MenuSelectionManager manager) {
        int index;
        if (event.getID() == KeyEvent.KEY_PRESSED) {
            switch (event.getKeyCode()) {
            case (KeyEvent.VK_KP_UP):
            case (KeyEvent.VK_UP):
                index = m_list.getSelectedIndex();
                if (index > 0)
                    select(index - 1);
                break;
            case (KeyEvent.VK_KP_DOWN):
            case (KeyEvent.VK_DOWN):
                index = m_list.getSelectedIndex();
                if (index <m_list.getModel().getSize()-1)
                    select(index + 1);
                break;
            case (KeyEvent.VK_SPACE):
            case (KeyEvent.VK_ENTER):
                ok();
                break;
            case (KeyEvent.VK_ESCAPE):
                manager.clearSelectedPath();
                break;
            }
            //      System.out.println(event.getKeyCode());
            event.consume();
        }
    }

    private int getHourForIndex( int index ) {
        return index / m_rowsPerHour;
    }

    private int getMinuteForIndex( int index ) {
        return (index % m_rowsPerHour) * m_minutesPerRow;

    }

    private void ok() {
        int index = m_list.getSelectedIndex();
        int hour = getHourForIndex( index );
        int minute = getMinuteForIndex( index );
        Calendar calendar = Calendar.getInstance(m_timeModel.getTimeZone(),m_timeModel.getLocale());
        if (hour >= 0) {
            calendar.set(Calendar.HOUR_OF_DAY,hour );
            calendar.set(Calendar.MINUTE,minute);
            calendar.set(Calendar.SECOND,0);
            calendar.set(Calendar.MILLISECOND,0);
            m_timeModel.setTime(calendar.getTime());
        }
    }

    public void processMouseEvent(MouseEvent event, MenuElement[] path, MenuSelectionManager manager) {
    }
    // End of MenuElement implementation
}


⌨️ 快捷键说明

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