java多功能选择器
一、
目描述 .................................................................................. 2
二、设计思路 .................................................................................. 2
三、运行结果 .................................................................................. 7
四、源代码 .................................................................................... 10
五、总结 ........................................................................................ 28
六、参考文献 ................................................................................ 28
一、题目描述
二、设计思路
1 类图:
2 说明:
1.1 java源文件及其功能
该系统的主界面—系统登录界面是由TestPasswordFiled类控制的,该
类继承与JFrame类,主要添加了三个按钮和两个文本框,文本框用于输入
用户名和密码,三个按钮分别为登录,帮助,退出按钮。并且为每一个按
钮添加了监听函数。当输入用户名和密码之后,点击登录按钮,如果用户
名和密码正确,就会进入系统进入选择界面,不正确的话,会提示你输入
不正确。点击帮助按钮会提示你系统的一组用户名和密码,帮助你进入系
统。点击退出按钮,即退出程序。并且还为该界面添加了一张背景图片。
选择界面是由ChoseFrame类控制。主要功能就是选择不同的按钮进
入不同的java程序。该类也主要是添加了几个按钮,并为按钮添加了消息
监听函数,用于点击按钮实现不同的功能。点击显示时钟按钮,会调用StilllClock函数,显示一个动态JAVA小时钟。点击系统简介按钮,会显示该系统的主要功能和说明。点击“图片移动”按钮,会调用KeyListenerDemo
类,显示一个窗口。点击“升旗仪式”按钮,会、调用Animation类,显示一个升国旗窗口。另外也为该类添加了一张图片。
时钟类StilllClock,主要实现的是显示一个动态时钟并且显示数字时间与当前的时间一至。本类还涉及圆形时钟的建立,需要在面板上调用函数画出一个圆并且将它均分为十二份,并添上数字。还需要一个显示数字时间的函数,显示数字时间。
升旗界面是由AnimationDemo控制,该类继承与JFrame,主要调用了一些函数,设置了两张图片,并能过随着时间的推移进行上下移动。还显示了一些描述性的文字,也能随着时间上下移动。
图片移动界面是由KeyListenerDemo类控制,主要是调用图片函数添加了四张图片,为上下左右键添加了键盘触发函数,点击键盘会选择不同的的图片并进行以移动。
系统简介界面主要是调用JOptionPane函数显示系统简介。
三、运行结果
登录界面:
选择界面:
时钟窗口:
图片移动窗口:
升旗仪式界面:
四、源代码
// TestPasswordField类 import java.awt.event.*; import java.awt.*; import javax.swing.*;
public class TestPasswordField extends JFrame{
private String[] nameString;
private String[] passwordString;
private JTextField inputName;
private JPasswordField passwordField;
private ChoseFrame chose=new ChoseFrame();
private JFrame hist=new JFrame();
public static void main(String[] args){
TestPasswordField frame = new TestPasswordField(); frame.setTitle("
系统登录窗体");
frame.setLocationRelativeTo(null);
frame.setSize(350,250);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true);
}
public TestPasswordField(){
setLayout(null);
nameString = createNameString();
passwordString = createPasswordString();
JLabel name = new JLabel("用户名:");
name.setBounds(20,60,80,40);
inputName = new JTextField(10);
inputName.setBounds(110,60,140,30);
inputName.setToolTipText("名字不能超过10个字符~"); JLabel password = new JLabel("密码:");
password.setBounds(20,110,100,30);
passwordField = new JPasswordField(8);
passwordField.setEchoChar('*');
passwordField.setBounds(110,110,140,30);
passwordField.setToolTipText("密码不能超过8个字符,且必须为数字~
");
ImageIcon imageIcon =new ImageIcon("qqtu.jpg");
Image image=imageIcon.getImage();
JButton pa=new JButton("",imageIcon);
JButton login = new JButton("登录");
JButton hellp= new JButton("帮助");
JButton exit = new JButton("退出");
pa.setBounds(0,0,340,50);
login.setBounds(15,170,100,35);
hellp.setBounds(115,170,100,35);
exit.setBounds(215,170,100,35);
add(pa);
add(name);
add(inputName);
add(password);
add(passwordField);
add(login);
add(hellp);
add(exit);
login.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){ int index=0;
String text = inputName.getText();
String word = new String(passwordField.getPassword());
for(int i = 0;i < nameString.length;i++)
if(text.equals(nameString[i]) ){
index = i;
break;
}
if(word.equals(passwordString[index])){
JOptionPane.showMessageDialog(null,"恭喜~登录成功~");
hist.setVisible(true);
}
else
JOptionPane.showMessageDialog(null,"对不起,您输入的密码和姓名不
匹配,请重新输入~"); }
});
hellp.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null,"用户名:huguanglin,密码:
19891210");
}
});
exit.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){ System.exit(0);
}
});
inputName.addActionListener(new ActionListener(){ public void
actionPerformed(ActionEvent e){ String text = inputName.getText();
Boolean bool=false;
for(int i = 0;i < nameString.length;i++ ) if(text.equals(nameString[i]))
bool = true;
if(bool)
JOptionPane.showMessageDialog(null,"输入合理,请继续~");
else
JOptionPane.showMessageDialog(null,"输入不合理,请重新输入~");
}
});
hist.add(chose);
hist.pack();
hist.setTitle("Java多功能选择系统");
}
public String[] createNameString(){
String[] name = {"huguanglin","liujian","wanggang","yuhong","housan",
"tianhao","luhao","huangxiao","zengjing","dulei"}; return name;
}
public String[] createPasswordString(){
String[] password =
{"19891210","19450530","19710404","19651223","19740821",
"19670924","19991220","19870809","19951016","19860806"};
return password;
}
}
// ChoseFrame类
import java.awt.event.*;
import java.awt.*;
import javax.swing.*;
public class ChoseFrame extends JPanel{
private ClockAnimation still=new ClockAnimation(); // private
KeyListenerDemo key=new KeyListenerDemo(); private JFrame jat=new
JFrame();
private JFrame histmoon1=new JFrame();
public ChoseFrame(){
setLayout(null);
setBounds(50,50,300,300);
ImageIcon imageIcon =new ImageIcon("tu.jpg"); Image
image=imageIcon.getImage();
JButton pa=new JButton("",imageIcon);
JButton login = new JButton("显示时钟");
JButton move=new JButton("升旗仪式");
JButton hellp=new JButton("图片移动");
JButton explain=new JButton("系统简介");
JButton exit = new JButton("退出");
pa.setBounds(0,0,300,100);
login.setBounds(50,120,100,35);
hellp.setBounds(50,170,100,35);
explain.setBounds(150,120,100,35);
move.setBounds(150,170,100,35);
exit.setBounds(110,240,100,35);
add(pa);
add(login);
add(hellp);
add(move);
add(explain);
add(exit);
histmoon1.add(still);
histmoon1.pack();
histmoon1.setTitle("Java多功能选择系统");
explain.addActionListener(new ActionListener(){ public void
actionPerformed(ActionEvent e){
String string="JAVA多功能选择器\n"+"一个登陆界面"+"一个选择界面,
可以选择不同的java程序~";
JOptionPane.showMessageDialog(null,string); }
});
login.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null,"欢迎使用显示时钟~");
histmoon1.setVisible(true);
}
});
hellp.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null,"欢迎使用图片移动程序~\n用键
盘控制图片的移动");
KeyListenerDemo key=new KeyListenerDemo(); key.setVisible(true);
}
});
move.addActionListener(new ActionListener(){ public void
actionPerformed(ActionEvent e){
JOptionPane.showMessageDialog(null,"欢迎使用升旗程序~");
AnimationDemo key=new AnimationDemo(); key.setBounds(0,0,750,750);
key.setVisible(true);
}
});
exit.addActionListener(new ActionListener(){ public void
actionPerformed(ActionEvent e){ System.exit(0);
}
});
}
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
}
//ClockAnimation类
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import javax.swing.Timer;
import java.util.*;
public class ClockAnimation extends StillClock{
public ClockAnimation()
{
Timer timer=new Timer(1000,new TimerListener());
timer.start();
}
private class TimerListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
setCurrentTime();
repaint();
}
}
}
class StillClock extends JPanel
{
private int hour;
private int minute;
private int second;
public StillClock()
{
setCurrentTime();
}
public StillClock(int hour,int minute,int second) {
this.hour=hour;
this.minute=minute;
this.second=second;
}
public int getHour()
{
return hour;
}
public void setHour(int hour) {
this.hour=hour;
repaint();
}
public int getMinute() {
return minute;
}
public void setMinute(int minute) {
this.minute=minute; repaint();
}
public int getSecond() {
return second;
}
public void setSecond(int second) {
this.second=second; repaint();
}
protected void paintComponent(Graphics g) {
super.paintComponent(g);
int
clockRadius=(int)(Math.min(getWidth(),getHeight()*0.8*0.5));
int xCenter=getWidth()/2;
int yCenter=getHeight()/2;
g.setColor(Color.black);
g.drawOval(xCenter-clockRadius,yCenter-clockRadius,2*clockRadius,2*clockRa
dius);
for(int i=1;i<=12;i++)
{
int
xStart=(int)(xCenter+0.9*clockRadius*Math.sin(Math.PI/6*i)); int
yStart=(int)(yCenter-0.9*clockRadius*Math.cos(Math.PI/6*i)); int
xEnd=(int)(xCenter+clockRadius*Math.sin(Math.PI/6*i)); int
yEnd=(int)(yCenter-clockRadius*Math.cos(Math.PI/6*i));
g.setColor(Color.black);
g.drawLine(xStart,yStart,xEnd,yEnd); Integer integer=new Integer(i);
switch (i)
{
case 1:
g.drawString("1",xStart-5,yStart+5); break;
case 2:
g.drawString("2",xStart-5,yStart+8);
break;
case 3:
g.drawString("3",xCenter+clockRadius-20,yCenter+5); break;
case 4:
g.drawString("4",xStart-6,yStart+5); break;
case 5:
g.drawString("5",xStart-5,yStart); break;
case 6:
g.drawString("6",xCenter-3,yCenter+clockRadius-15); break;
case 7:
g.drawString("7",xStart,yStart); break;
case 8:
g.drawString("8",xStart,yStart); break;
case 9:
g.drawString("9",xCenter-clockRadius+15,yCenter+5); break;
case 10:
g.drawString("10",xStart,yStart+5); break;
case 11:
g.drawString("11",xStart,yStart+5); break;
case 12:
g.drawString("12",xCenter-6,yCenter-clockRadius+22);
break;
}
}
for(int i=0;i<60;i++)
{
int
xStart=(int)(xCenter+0.95*clockRadius*Math.sin(Math.PI/30*i));
int
yStart=(int)(yCenter-0.95*clockRadius*Math.cos(Math.PI/30*i));
int
xEnd=(int)(xCenter+clockRadius*Math.sin(Math.PI/30*i)); int
yEnd=(int)(yCenter-clockRadius*Math.cos(Math.PI/30*i));
g.setColor(Color.black);
g.drawLine(xStart,yStart,xEnd,yEnd);
}
int sLength=(int)(clockRadius*0.8);
int
xSecond=(int)(xCenter+sLength*Math.sin(second*(2*Math.PI/60)));
int
ySecond=(int)(yCenter-sLength*Math.cos(second*(2*Math.PI/60)));
g.setColor(Color.red);
g.drawLine(xCenter,yCenter,xSecond,ySecond); int mLength = (int)(clockRadius * 0.60);
int xMinute = (int)(xCenter + mLength *Math.sin(minute * (2 * Math.PI / 60)));
int yMinute = (int)(yCenter - mLength *Math.cos(minute * (2 * Math.PI / 60)));
g.setColor(Color.blue);
g.drawLine(xCenter, yCenter, xMinute, yMinute); int hLength = (int)(clockRadius * 0.45);
int xHour = (int)(xCenter + hLength *Math.sin((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
int yHour = (int)(yCenter - hLength *Math.cos((hour % 12 + minute / 60.0) * (2 * Math.PI / 12)));
g.setColor(Color.green);
g.drawLine(xCenter, yCenter, xHour, yHour);
g.setColor(Color.blue);
g.setFont(new Font("Courier",Font.BOLD,16));
g.drawString(hour+":"+minute+":"+second,(int)(0.8*getWidth()/2),getHeight()-10);
}
public void setCurrentTime()
{
Calendar calendar=new GregorianCalendar();
this.hour=calendar.get(Calendar.HOUR_OF_DAY); this.minute=calendar.get(Calendar.MINUTE); this.second=calendar.get(Calendar.SECOND); }
public Dimension getPreferredSize()
{
return new Dimension(300,300);
}
}
//KeyListenerDemo类
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class KeyListenerDemo extends JFrame implements KeyListener
{
Image playerImage[]=new Image[4];
Image player;
Toolkit tool;
int x=200,y=200;
public KeyListenerDemo()
{
super("KeyListenerDemo"); tool=getToolkit();
playerImage[0]=tool.getImage("up.jpg");
playerImage[1]=tool.getImage("down.jpg");
playerImage[2]=tool.getImage("left.jpg");
playerImage[3]=tool.getImage("right.jpg"); player=playerImage[0]; addKeyListener(this); this.setSize(600,600); this.setVisible(true); } public void paint(Graphics g) { super.paint(g); g.setColor(Color.WHITE); g.fillRect(0,0,650,650); g.drawImage(player,x,y,150,150,this); } public void keyPressed(KeyEvent e) { switch (e.getKeyCode()) { case KeyEvent.VK_UP: player=playerImage[0]; if(y-32<0) break; else y-=10; repaint(); break; case KeyEvent.VK_DOWN: player=playerImage[1]; if(y+48>400) break; else y+=10; repaint(); break; case KeyEvent.VK_LEFT:
player=playerImage[2];
if(x-2<0) break;
else x-=10;
repaint();
break;
case KeyEvent.VK_RIGHT:
player=playerImage[3];
if(x+48>400) break;
else x+=10;
repaint();
break;
}
}
public void keyTyped(KeyEvent e){} ;
public void keyReleased(KeyEvent e){};
}
// AnimationDemo类
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
public class AnimationDemo extends JFrame { public
AnimationDemo(){
ImageIcon imageIcon =new ImageIcon("国旗.jpg"); Image image =imageIcon.getImage();
add(new MovingImagePanel(image));
}
static class MovingImagePanel extends JPanel{ ImageIcon imageIcon
=new ImageIcon(); Image image =imageIcon.getImage();
private int xCoordinate=0;
private int yCoordinate=500;
public MovingImagePanel(Image image){
this.image=image;
}
public void paintComponent(Graphics g){
super.paintComponent(g);
ImageIcon imageIcon =new ImageIcon("罪人.gif"); Image image2 =imageIcon.getImage();
g.drawImage(image2,xCoordinate+380,600-yCoordinate,200,160,this);
g.setColor(Color.GREEN);
g.setFont(new Font("华文行楷",Font.BOLD,35)); g.drawString("打倒小日本",xCoordinate+380,600-yCoordinate);
if(image!=null)
{
if(yCoordinate<-150){
yCoordinate=610;
}
yCoordinate-=1;
g.drawImage(image,xCoordinate,yCoordinate,210,180,this);
if(yCoordinate<580&&yCoordinate>500)
{
g.setColor(Color.RED);
g.setFont(new Font("方正舒体",Font.BOLD,40));
g.drawString("中国万岁",xCoordinate+30,yCoordinate-10);
}
if(yCoordinate<430&&yCoordinate>340)
{
g.setColor(Color.BLUE);
g.setFont(new Font("华文彩云",Font.BOLD,45));
g.drawString("中国万岁",xCoordinate+250,yCoordinate-240);
}
if(yCoordinate<300&&yCoordinate>220) {
g.setColor(Color.MAGENTA);
g.setFont(new Font("方正舒",Font.BOLD,40));
g.drawString("中国万",xCoordinate+150,yCoordinate+280);
}
if(yCoordinate<200&&yCoordinate>100) {
g.setColor(Color.DARK_GRAY);
g.setFont(new Font("方正舒",Font.BOLD,30));
g.drawString("中国万",xCoordinate+10,yCoordinate-40);
}
if(yCoordinate<95&&yCoordinate>-150) {
g.setColor(Color.RED);
g.setFont(new Font("华文行",Font.BOLD,60));
g.drawString("中国万",xCoordinate+80,yCoordinate+480);
}
g.setColor(Color.MAGENTA);
g.setFont(new Font("楷_GB2312",Font.PLAIN,20));
g.drawString("义勇军进行",xCoordinate+260,yCoordinate-17);
g.setColor(Color.MAGENTA);
g.setFont(new Font("楷体岁体岁楷岁体曲体
_GB2312",Font.PLAIN,15));
g.drawString("田汉 作词 聂耳 作曲
",xCoordinate+318,yCoordinate+5);
g.setFont(new Font("楷体_GB2312",Font.PLAIN,17));
g.drawString("起来!",xCoordinate+235,yCoordinate+17);
g.drawString("不愿做奴隶的人们!",xCoordinate+235,yCoordinate+38);
g.drawString("把我们的血肉,筑成我们新的长
城!",xCoordinate+235,yCoordinate+58);
g.drawString("中华民族到了,最危险的时
候,",xCoordinate+235,yCoordinate+78);
g.drawString("每个人被迫着,发出最后的吼
声!",xCoordinate+235,yCoordinate+98);
g.drawString("起来!起来!起来! ",xCoordinate+235,yCoordinate+118);
g.drawString("我们万众一心,冒着敌人的炮火
",xCoordinate+235,yCoordinate+138);
g.drawString("前进, ",xCoordinate+235,yCoordinate+158);
g.drawString("冒着敌人的炮火",xCoordinate+235,yCoordinate+178);
g.drawString("前进,前进,",xCoordinate+235,yCoordinate+198);
g.drawString("前进,进 ",xCoordinate+235,yCoordinate+218);
}
}
}
}
五、总结
1本程序主要实现了不同界面之间的调用,有登陆界面,选择界面,还有几个java小程序组成。整体的功能还算可以,输入用户名和密码能够实现系统的登陆,进入选择界面之后可以选择不同的功能按键实现不同的功能。本来还在登陆界面设计了申请账号的功能,但是编写程序的过程中遇到一点问题,没有处理好数据的存储与交换,不能进行用户名的添加,所以就没有实现这一功能。
2 在写程序的过程中进一步对JAVA中的内部类有了更多的了解,学会了使用不同的内部函数。JAVA中的很多内部类功能都很全面,使用它们可以降低了编程的难度,为我们学习Java编程提供了很大的方便。同时也学会了很多编程的
和技巧。总的来说,这次课程设计自己还是学会了很多东西的。
六、参考文献
[1]. 万波 郑海红 译著 JAVA语言程序设计基础篇.机械工业出版社.
[2]. 叶核亚 编著 JAVA2程序设计 实用教程..电子工业出版社.