📄 jtextfieldclock.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 + -