Java GUI组件练习用Demo,主要是为了学习GUI的设计思路、组件的特性。这里的代码并不是最优雅的解决方案,千万别纠结这个……
要点:
- 绘图的框架应该继承自JFrame,具体组件继承自JPanel。
- 继承自JPanel的类覆写父类(JComponent)的paintComponent()方法,注意不是Container的paintComponents()!
- 这些都是不能重用的组件,所以要刷新则调用repaint(),此处在每次调用setter方法的时候进行调用。
- 通过时分秒计算时针、分针、秒针的位置需要用三角函数的知识。
- 在计算时针和分针角度时,秒数对其影响太小(为second/3600),故此处为方便忽略不算。
效果图:黄线只是为了调整时钟数字摆放的位置,展示的代码中已经删去。
用于显示GUI的类,继承了JFrame,引用了两个继承自JPanel的类(分别用作绘画时钟和显示具体时间)。
package thinkwise.gui.graphics.practice;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.Timer;
public class DisplayClock extends JFrame {
private StillClock clock = new StillClock();
public DisplayClock() {
final MessagePanel p = new MessagePanel(clock.getHour() + ":" + clock.getMinute() + ":" + c