자바 시계 효과 구현
구현 효 과 는 그림:
Java 코드:
파일 1:ClockPanel.java
import static java.util.Calendar.HOUR;
import static java.util.Calendar.MILLISECOND;
import static java.util.Calendar.MINUTE;
import static java.util.Calendar.SECOND;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.util.Calendar;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
/**
*
*
* @author
*/
@SuppressWarnings("serial")
public class ClockPanel extends JPanel {
// 3
private static final BasicStroke HOURS_POINT_WIDTH = new BasicStroke(4);
private static final BasicStroke MINUETES_POINT_WIDTH = new BasicStroke(3);
private static final BasicStroke SEC_POINT_WIDTH = new BasicStroke(2);
ImageIcon background;//
private int centerX;//
private int centerY;//
private final static int secLen = 60; //
private final static int minuesLen = 55; //
private final static int hoursLen = 36; //
/**
*
*/
public ClockPanel() {
setToolTipText(" +、- ,Crtl+Shift+X ");//
setOpaque(false);
background = new ImageIcon(getClass().getResource("clock.jpg"));//
int iconWidth = background.getIconWidth();//
centerX = iconWidth / 2;//
int iconHeight = background.getIconHeight();
centerY = iconHeight / 2;//
setPreferredSize(new Dimension(iconWidth, iconHeight));
}
@Override
public void paint(Graphics g) {//
Graphics2D g2 = (Graphics2D) g;
g2.drawImage(background.getImage(), 0, 0, this);//
Calendar calendar = Calendar.getInstance();//
int millisecond = calendar.get(MILLISECOND);//
int sec = calendar.get(SECOND);//
int minutes = calendar.get(MINUTE);//
int hours = calendar.get(HOUR);//
double secAngle = (60 - sec) * 6 - (millisecond / 150); //
int minutesAngle = (60 - minutes) * 6;//
int hoursAngle = (12 - hours) * 360 / 12 - (minutes / 2);//
// 、 、
int secX = (int) (secLen * Math.sin(Math.toRadians(secAngle)));// X
int secY = (int) (secLen * Math.cos(Math.toRadians(secAngle))); // Y
int minutesX = (int) (minuesLen * Math
.sin(Math.toRadians(minutesAngle))); // X
int minutesY = (int) (minuesLen * Math
.cos(Math.toRadians(minutesAngle))); // Y
int hoursX = (int) (hoursLen * Math.sin(Math.toRadians(hoursAngle))); // X
int hoursY = (int) (hoursLen * Math.cos(Math.toRadians(hoursAngle))); // Y
// 、 、
g2.setStroke(HOURS_POINT_WIDTH);//
g2.setColor(Color.BLACK);//
g2.drawLine(centerX, centerY, centerX - hoursX, centerY - hoursY);//
g2.setStroke(MINUETES_POINT_WIDTH);//
if (minutesAngle != hoursAngle) // 、
g2.setColor(new Color(0x2F2F2F));//
else {
g2.setColor(Color.GREEN);//
}
g2.drawLine(centerX, centerY, centerX - minutesX, centerY - minutesY);//
g2.setStroke(SEC_POINT_WIDTH);//
if (secAngle != hoursAngle && secAngle != minutesAngle)// 、 、
g2.setColor(Color.ORANGE);//
else {
g2.setColor(Color.GREEN);//
}
// 3
g2.fillOval(centerX - 5, centerY - 5, 10, 10);//
g2.drawLine(centerX, centerY, centerX - secX, centerY - secY);//
g2.drawLine(centerX + 1, centerY + 1, centerX - secX + 1, centerY
- secY + 1);//
}
}
파일 2:ClockFrame.java
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* @author
*/
@SuppressWarnings("serial")
public class ClockFrame extends JDialog {
private float opqua = 0.7f;
private ClockPanel clockPanel;
private Point fp; //
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
ClockFrame frame = new ClockFrame();//
frame.setVisible(true);//
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
*
*/
public ClockFrame() {
super();
setUndecorated(true);//
setAlwaysOnTop(true);//
setTitle(" ");//
getContentPane().setLayout(new BorderLayout());
setBounds(100, 30, 217, 257);
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
clockPanel = new ClockPanel();//
getContentPane().add(clockPanel);
//
clockPanel.addMouseListener(new MouseAdapter() {
public void mousePressed(final MouseEvent e) {
fp = e.getPoint();
if (e.getButton()==MouseEvent.BUTTON3){
System.exit(0);//
}
}
});
//
clockPanel.addMouseMotionListener(new MouseMotionAdapter() {
public void mouseDragged(final MouseEvent e) {
JDialog frame = (JDialog) getRootPane().getParent();
Point point = e.getLocationOnScreen();
frame.setLocation(point.x - fp.x, point.y - fp.y);
}
});
pack();
addKeyListener(new KeyAdapter() {//
public void keyPressed(final KeyEvent e) {
int code = e.getKeyCode();
switch (code) {//
case KeyEvent.VK_ADD:// +
opqua += 0.05;
opqua = opqua > 0.95f ? 1f : opqua;
break;
case KeyEvent.VK_SUBTRACT:// -
opqua -= 0.05;
opqua = opqua < 0.1f ? 0.1f : opqua;
break;
}
// Ctrl+Shift+XM I,
if (code == KeyEvent.VK_X
&& e.getModifiersEx() == (KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK))
System.exit(0);
}
});
Dimension screenSize = getToolkit().getScreenSize();
double width = screenSize.getWidth();
int x = (int) (width - getWidth() - 30);
setLocation(x, 30);
new Thread() {// ,
@Override
public void run() {
try {
while (true) {
sleep(1000);// 1
clockPanel.repaint();//
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
}
자바 파일 두 개가 이 루어 졌 습 니 다!다음은 실현 절 차 를 설명 하 겠 습 니 다.1.위의 코드 를 할당 하고 메모 장 에 붙 여 저장 합 니 다.두 파일 은 같은 파일 에 넣 고 파일 접 두 사 를 자바 로 바 꿉 니 다.
2.자바 환경 설정 은 JDK 를 다운로드 하 는 것 입 니 다.이 절 차 를 모 르 는 자체 바 이 두 입 니 다.
추천 읽 기:
그림 과 글 은 자바 환경 변수 설정 방법 을 상세 하 게 설명 한다.
자바 초보 환경 구축 JDK 8 설치 설정 튜 토리 얼
3.cmd 는 컴 파일 명령 javac 를 실행 합 니 다(주의:ClockFrame.java 파일 만 컴 파일 합 니 다.ClockPanel.java 는 컴 파일 하지 않 습 니 다.ClockFrame.java 파일 을 컴 파일 할 때 도 ClockPanel.java 파일 을 컴 파일 하기 때 문 입 니 다)
4.자바 명령 실행(그림 참조)
이 실현 기능 은 이것으로 끝났다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.