📄 raplatime.java
字号:
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 + -