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

📄 jtextfieldclock.java

📁 编程之道--java程序设计入门源代码
💻 JAVA
字号:
/**
 * 文本域的测试
 */
import java.awt.Container;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;
import java.awt.geom.Line2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

public class JTextFieldClock
{
	public static void main(String[] args)
	{
		JTextFieldFrame frame = new JTextFieldFrame();
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.show();
	}
} 

class JTextFieldFrame extends JFrame
{
	private static final int WIDTH = 400;
	private static final int HEIGHT = 300;
	
	public JTextFieldFrame()
	{
		setSize(WIDTH, HEIGHT);//设置框架的大小		
		setTitle("文本域测试");//设置框架的标题
		
		Container con = getContentPane();//得到了内容窗格
		
		ClockPanel clockPanel = new ClockPanel();
		JTextFieldPanel textFieldPanel = new JTextFieldPanel(clockPanel);
		con.add(textFieldPanel, BorderLayout.SOUTH);//将文本域面板添加到内容窗格中
		con.add(clockPanel, BorderLayout.CENTER);//将时钟面板添加到内容窗格中
	}
}

class JTextFieldPanel extends JPanel
{
	private JTextField hourText;
	private JTextField minuteText;
	private ClockPanel clockPanel;
	private int hour;
	private int minute;
	
	public JTextFieldPanel(ClockPanel clockPanel)
	{
		this.clockPanel = clockPanel;
		hourText = new JTextField("00", 3);
		minuteText = new JTextField("00", 3);
		
		DocumentListener listener = new ClockListener();
		hourText.getDocument().addDocumentListener(listener);
		minuteText.getDocument().addDocumentListener(listener);
	
		add(hourText);
		add(minuteText);		
	}
	
	private void setClock()
	{
		try
		{
			hour = Integer.parseInt(hourText.getText().trim());
			minute = Integer.parseInt(minuteText.getText().trim());
			clockPanel.setTime(hour, minute);
		} catch (NumberFormatException e)
		{}
	}
	
	private class ClockListener implements DocumentListener
	{
		public void insertUpdate(DocumentEvent e)
		{
			setClock();
		}
		
		public void removeUpdate(DocumentEvent e)
		{
			setClock();
		}
		
		public void changedUpdate(DocumentEvent e){}
	}	
}

class ClockPanel extends JPanel
{
	private double minutes = 0;
	private double RADIUS = 100;
	private double MINUTE_HAND_LENGTH = 0.8 * RADIUS;
	private double HOUR_HAND_LENGTH = 0.6 * RADIUS;
	
	public void paintComponent(Graphics g)
	{
		//画时钟面板
		super.paintComponent(g);
		Graphics2D g2 = (Graphics2D)g;
		Ellipse2D circle = new Ellipse2D.Double(0, 0, 2 * RADIUS, 2 * RADIUS);
		g2.draw(circle);
		
		//画时针
		double hourAngle = Math.toRadians(90 - 360 * minutes/(12 * 60));
		drawHand(g2, hourAngle, HOUR_HAND_LENGTH);
		
		//画分针
		double minuteAngle = Math.toRadians(90 - 360 * minutes/60);
		drawHand(g2, minuteAngle, MINUTE_HAND_LENGTH);
	}
	
	public void drawHand(Graphics2D g2, double angle, double handLength)
	{
		Point2D end = new Point2D.Double(RADIUS + handLength * Math.cos(angle),
																		 RADIUS - handLength * Math.sin(angle));
		Point2D center = new Point2D.Double(RADIUS, RADIUS);
		g2.draw(new Line2D.Double(center, end));
	}
	
	public void setTime(int h, int m)
	{
		minutes = h * 60 + m;
		repaint();
	}
}

⌨️ 快捷键说明

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