Package org.apache.felix.upnp.sample.clock

Source Code of org.apache.felix.upnp.sample.clock.ClockPane

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*   http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.apache.felix.upnp.sample.clock;

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.JPanel;

/*
* @author <a href="mailto:dev@felix.apache.org">Felix Project Team</a>
*/

public class ClockPane extends JPanel  // MouseListener
{
  public ClockPane()
  {
    loadImage();
    initPanel();
  }

  ////////////////////////////////////////////////
  //  Background
  ////////////////////////////////////////////////
 

  private BufferedImage panelmage;
 
  private void loadImage()
  {
   
    try {
      panelmage = ImageIO.read(ClockPane.class.getResourceAsStream("images/clock.jpg"));
    }
    catch (Exception e) {
      System.out.println(e);
    }
  }

  private BufferedImage getPaneImage()
  {
    return panelmage;
  }

  ////////////////////////////////////////////////
  //  Background
  ////////////////////////////////////////////////

  private void initPanel()
  {
    BufferedImage panelmage = getPaneImage();
    setPreferredSize(new Dimension(panelmage.getWidth(), panelmage.getHeight()));
  }

  ////////////////////////////////////////////////
  //  Font
  ////////////////////////////////////////////////

  private final static String DEFAULT_FONT_NAME = "Lucida Console";
  private final static int DEFAULT_TIME_FONT_SIZE = 60;
  private final static int DEFAULT_DATE_FONT_SIZE = 18;
  private final static int DEFAULT_SECOND_BLOCK_HEIGHT = 8;
  private final static int DEFAULT_SECOND_BLOCK_FONT_SIZE = 10;

  private Font timeFont = null;
  private Font dateFont = null;
  private Font secondFont = null;

  private Font getFont(Graphics g, int size)
  {
    Font font = new Font(DEFAULT_FONT_NAME, Font.PLAIN, size);
    if (font != null)
      return font;
    return g.getFont();
  }
   
  private Font getTimeFont(Graphics g)
  {
    if (timeFont == null)
      timeFont = getFont(g, DEFAULT_TIME_FONT_SIZE);
    return timeFont;
  }

  private Font getDateFont(Graphics g)
  {
    if (dateFont == null)
      dateFont = getFont(g, DEFAULT_DATE_FONT_SIZE);
    return dateFont;
  }

  private Font getSecondFont(Graphics g)
  {
    if (secondFont == null)
      secondFont = getFont(g, DEFAULT_SECOND_BLOCK_FONT_SIZE);
    return secondFont;
  }

  ////////////////////////////////////////////////
  //  paint
  ////////////////////////////////////////////////

  private void drawClockInfo(Graphics g)
  {
    Clock clock = Clock.getInstance();
   
    int winWidth = getWidth();
    int winHeight = getHeight();
   
    g.setColor(Color.BLACK);
   
    //// Time String ////
   
    String timeStr = clock.getTimeString();

    Font timeFont = getTimeFont(g);
    g.setFont(timeFont);

    FontMetrics timeFontMetric = g.getFontMetrics();
    Rectangle2D timeStrBounds = timeFontMetric.getStringBounds(timeStr, g);

    int timeStrWidth = (int)timeStrBounds.getWidth();   
    int timeStrHeight = (int)timeStrBounds.getHeight();
    int timeStrX = (winWidth-timeStrWidth)/2;
    int timeStrY = (winHeight+timeStrHeight)/2;
    int timeStrOffset = timeStrHeight/8/2;
    g.drawString(
      timeStr,
      timeStrX,
      timeStrY);

    //// Date String ////

    String dateStr = clock.getDateString();

    Font dateFont = getDateFont(g);
    g.setFont(dateFont);

    FontMetrics dateFontMetric = g.getFontMetrics();
    Rectangle2D dateStrBounds = dateFontMetric.getStringBounds(dateStr, g);

    g.drawString(
      dateStr,
      (winWidth-(int)dateStrBounds.getWidth())/2,
      timeStrY-timeStrHeight-timeStrOffset);

    //// Second Bar ////
   
    Font secFont = getSecondFont(g);
    g.setFont(secFont);
    int sec = clock.getSecond();
    int secBarBlockSize = timeStrWidth / 60;
    int secBarBlockY = timeStrY + timeStrOffset;
    for (int n=0; n<sec; n++) {
      int x = timeStrX + (secBarBlockSize*n);
      g.fillRect(
        x,
        secBarBlockY,
        secBarBlockSize-1,
        DEFAULT_SECOND_BLOCK_HEIGHT);
    }
    if (sec != 0 && (sec % 10) == 0) {
      int x = timeStrX + (secBarBlockSize*sec);
      g.drawString(
        Integer.toString(sec),
        x + secBarBlockSize,
        secBarBlockY + DEFAULT_SECOND_BLOCK_HEIGHT);
    }
  }

  private void clear(Graphics g)
  {
    g.setColor(Color.GRAY);
    g.clearRect(0, 0, getWidth(), getHeight());
  }
 

  private void drawPanelImage(Graphics g)
  {
    g.drawImage(getPaneImage(), 0, 0, null);
  }
   
  public void paint(Graphics g)
  {
    clear(g);
    drawPanelImage(g);
    drawClockInfo(g);
  }
}
TOP

Related Classes of org.apache.felix.upnp.sample.clock.ClockPane

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.