java图形化界面的使用

Java图形化界面的使用以及案例

关于java的图形化界面的使用的具体细节,又有哪些组件,容器,这么使用这里就不多说了,具体可以参考下面的链接博主写的很超详细

http://blog.csdn.net/xietansheng/article/details/72814492

大家可以按照下面这个图来理解java图形化界面设计

 我们直接看案例,用图形化界面做一个用户注册,登陆,及答题的系统(答题只做了界面,功能并没有实现),用户数据用文件存储

 

用户名输入错以后 

 

登陆成功后 

 

用户注册界面 

 

testSystem类(程序的主函数,login类用户登陆)

package testSystem;
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.EventListener;
//BorderLayout边界布局管理器   FlowLayout流式布局管理器 JFrame顶层容器
class Login extends JFrame{
	public static String name;//定义静态的全局变量
	JButton btnLogin,btnRegister,btnCancel;//定义按钮
	JPanel pnlSouth,pnlNorth,pnlCenter,pnlCenter1,pnlCenter2;
	//定义中间容器
	JLabel lbl1,lbl2,lbl3;
	//定义标签
	JTextField tfName;//定义单行文本框
	JPasswordField Pwd;//定义密码输入框
	
	Login(String title){
		super(title);
		init();
		}
	//定义构造函数
	/**
	 * 内部类的使用
	 * @author hp
	 *
	 */
	class ButtonListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
			// TODO Auto-generated method stub
			if (e.getSource()==btnLogin)
			{ 
				check();
			}
			else if(e.getSource()==btnRegister)
			{
				//dispose();
				JFrame u=new UserRegister("用户注册:");
				u.setBounds(200, 400, 250, 270);
				u.setLocationRelativeTo(null);
				u.setVisible(true);
			}
			else
			{
				dispose();
			}
		}
	}
	public void init(){
	pnlNorth=new JPanel();
	lbl1=new JLabel("欢迎来到登录系统");
	Font f=new Font("Dialog",1,18);//定义字体字号大小
	lbl1.setFont(f);
	lbl1.setForeground(Color.blue);//定义字体颜色
	pnlNorth.add(lbl1);
	this.add(pnlNorth,BorderLayout.NORTH);
	//添加容器到北部
	
	//Center
	pnlCenter=new JPanel();
	pnlCenter1=new JPanel();
	pnlCenter2=new JPanel();
	pnlCenter.setLayout(new BorderLayout());
	lbl2=new JLabel("用户名");
	tfName=new JTextField(10);
	pnlCenter1.add(lbl2);
	pnlCenter1.add(tfName);
	pnlCenter.add(pnlCenter1,BorderLayout.NORTH);
	
	lbl3=new JLabel("密码:");
	Pwd=new JPasswordField(10);
	Pwd.setEchoChar('*');//设置密码为*;
	pnlCenter2.add(lbl3);
	pnlCenter2.add(Pwd);
	pnlCenter.add(pnlCenter2,BorderLayout.SOUTH);
	
	this.add(pnlCenter,BorderLayout.CENTER);
	//添加布局器到中部
	
	//south
	pnlSouth=new JPanel();
	btnLogin=new JButton("登录");
	btnRegister=new JButton("注册");
	btnCancel=new JButton("取消");
	pnlSouth.add(btnLogin);
	pnlSouth.add(btnRegister);
	pnlSouth.add(btnCancel);
	
	this.add(pnlSouth,BorderLayout.SOUTH);
	this.setBounds(100, 200, 500, 500);
	this.pack();//调整此窗口的大小,以适合其子组件的首选大小和布局。
	this.setVisible(true);//显示窗体
	ButtonListener Listen=new ButtonListener();//注册监听按钮
	btnLogin.addActionListener(Listen);//对监听器进行授权
	btnRegister.addActionListener(Listen);
	btnCancel.addActionListener(Listen);
	/***
	 * 内部匿名类的定义,使用
	btnRegister.addActionListener(new ActionListener()
	{
		public void actionPerformed(ActionEvent e)
		{	
			if (e.getSource()==btnLogin)
			{ 
				check();
			}
			else if(e.getSource()==btnRegister)
			{
				dispose();
				JFrame u=new UserRegister("用户注册:");
				u.setBounds(200, 400, 250, 270);
				u.setLocationRelativeTo(null);
				u.setVisible(true);
			}
			else{}
		}
	});*/
	//居中显示
	/*Toolkit kit = Toolkit.getDefaultToolkit();    // 定义工具包
    Dimension screenSize = kit.getScreenSize();   // 获取屏幕的尺寸
   int screenWidth = screenSize.width/2;         // 获取屏幕的宽
   int screenHeight = screenSize.height/2;       // 获取屏幕的高
   int width = this.getWidth();//获取窗口的宽
   int height = this.getHeight();//获取窗口的高*/
   /*System.out.println(screenWidth);
   System.out.println(width);*/
   //setLocation(screenWidth, screenHeight);
   //setLocation(screenWidth-width/2, screenHeight-height/2);
}
	public  int check()
	{
		int j=0;
		int count=0;
		ArrayList UserNameList=FileMange.ReadFile(0);
		ArrayList PassWordList=FileMange.ReadFile(1);
		for(int i=0;i<UserNameList.size();i++)
			if(tfName.getText().trim().equals(UserNameList.get(i)))
			{
				 count=1;
				 j=i;
			}
		if(count==0)
		{
			JOptionPane.showMessageDialog(this,"用户名不存在");
				tfName.setText("");
				return 0;
				}
		 if((new String(Pwd.getPassword()).trim().equals(PassWordList.get(j))))
			 {name=tfName.getText().trim();
				JOptionPane.showMessageDialog(this,"登录成功");
			 JFrame s=new StudentTest("学生在线考试系统");
				s.setBounds(700, 700,600,600);
				s.setLocationRelativeTo(null);
		 	return 1;}
		 else
			{JOptionPane.showMessageDialog(this, "密码不存在");
			Pwd.setText("");
			return 0;
			}
		 }
		
		
}

public class TestSystem {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		JFrame f=new Login("用户登录");
		f.setResizable(false);//设置其不能最大化
		f.setLocationRelativeTo(null);//居中显示
		//f.setLocation(100, 100);
		//f.setSize(500,500);
		//f.setBounds(100, 100, 500,500);
		//f.setVisible(true);
		/*
		JFrame u=new UserRegister("用户注册:");
		u.setBounds(200, 400, 250, 270);
		u.setLocationRelativeTo(null);
		u.setVisible(true);*/
		
		/*
		JFrame s=new StudentTest("学生在线考试系统");
		s.setBounds(700, 700,600,600);
		s.setLocationRelativeTo(null);*/
	}

}

UserResgister类(用户注册)

package testSystem;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.*;

import javax.swing.*;
class UserRegister extends JFrame{
	JLabel lbl1,lbl2,lbl3,lbl4,lbl5,lbl6,lbl7;
	JPanel pnlSouth,pnlNorth,pnlCenter,pnlCenter1,
	pnlCenter2,pnlCenter3,pnlCenter4,pnlNorth1,pnlEast,pnlWest,pnlSouth1;
	JTextField tfName,tfAge;
	JPasswordField Pwd,cPwd;//定义密码框
	JButton btnRegister,btnReset,btnCancel;
    ButtonGroup cgSex;//定义复选框
	JRadioButton  cm,cf;
	JComboBox<String>cclass;//定义下拉框
	UserRegister(String title){super(title);init();}
	/**
	 * 设置鼠标点击事件
	 */
	class ButtonListener implements ActionListener{
		@Override
		public void actionPerformed(ActionEvent e) {
		if(e.getActionCommand()=="注册")
			register();
		else if(e.getActionCommand()=="重置")
		{
			tfName.setText("");
			Pwd.setText("");
			cPwd.setText("");
			tfAge.setText("");
		}
		else dispose();
		
	
	}
	}
	public  int register()
	{
		
		String pwd=new String(Pwd.getPassword()).trim();
		String cpwd=new String(cPwd.getPassword()).trim();
		ArrayList UserNameList=FileMange.ReadFile(0);
		String s="";
		String value=cclass.getSelectedItem().toString();
		ArrayList slist=new ArrayList();
		//String pwd=Pwd.getPassword().toString().trim();
		if(!((!tfName.getText().equals(""))&&(!pwd.equals(""))&&(!cm.getText().equals("")
				||!cf.getText().equals(""))&&(!tfAge.getText().equals(""))&&(!value.equals(""))))
		{
			JOptionPane.showMessageDialog(this,"信息没有填完整");
			return 0;
		}
		
		for(int i=0;i<UserNameList.size();i++)
		if(tfName.getText().trim().equals(UserNameList.get(i)))
		{
		JOptionPane.showMessageDialog(this, "用户名已存在");
		return 0;
		}

			if(pwd.length()<6)
				{
				JOptionPane.showMessageDialog(this, "密码必须是6位数及以上");
				return 0;}
			int count1=0;
			int count2=0;
			for(int j=0;j<pwd.length();j++)
				{if(!((pwd.charAt(j)>='0'&&pwd.charAt(j)<='9')||(pwd.charAt(j)>='a'&&pwd.charAt(j)<='z')
						||(pwd.charAt(j)>='A'&&pwd.charAt(j)<='Z')))
					{
					JOptionPane.showMessageDialog(this, "密码必须是由字母和数字组合而成,且密码必须是6位数及以上");
					return 0;
					}
				if(pwd.charAt(j)>='0'&&pwd.charAt(j)<='9')
				{
					count1=1;
				}
				else count2=1;
				}
			if(!(count1==1&&count2==1))
				{JOptionPane.showMessageDialog(this, "密码必须是由字母和数字组合而成,且密码必须是6位数及以上");
			return 0;}
			if(!cpwd.equals(pwd))
			{
				JOptionPane.showMessageDialog(this,"密码与确认密码不一致");
				return 0;
			}

				slist.add(tfName.getText());
				slist.add(pwd);
				if(cm.isSelected())
					slist.add(cm.getText());
				else slist.add(cf.getText());
				slist.add(tfAge.getText());
				slist.add(value);
				for(int i=0;i<slist.size();i++)
					s=s+(String)slist.get(i)+" ";
				FileMange.WriteFile(s);
			//slist.add(cgSex.getSelectedJRadioButton(cgSex))
			//slist.add()
		//String []SArray=s.split(",");
			JOptionPane.showMessageDialog(this, "注册成功");
			return 1;
			
	}

public void init(){
pnlNorth=new JPanel();
lbl1=new JLabel("用户注册");
pnlNorth.add(lbl1);
this.add(pnlNorth,BorderLayout.NORTH);


pnlCenter=new JPanel();
pnlCenter1=new JPanel();
pnlCenter2=new JPanel();
pnlCenter3=new JPanel();
pnlCenter.setLayout(new BorderLayout());
lbl2=new JLabel("用户名:    ");
tfName=new JTextField(10);
pnlCenter1.add(lbl2);
pnlCenter1.add(tfName);
pnlCenter.add(pnlCenter1,BorderLayout.NORTH);

lbl3=new JLabel("密码:        ");
Pwd=new JPasswordField(10);
Pwd.setEchoChar('*');
pnlCenter2.add(lbl3);
pnlCenter2.add(Pwd);
pnlCenter.add(pnlCenter2,BorderLayout.CENTER);

lbl4=new JLabel("确认密码:");
cPwd=new JPasswordField(10);
cPwd.setEchoChar('*');
pnlCenter3.add(lbl4);
pnlCenter3.add(cPwd);
pnlCenter.add(pnlCenter3,BorderLayout.SOUTH);
this.add(pnlCenter,BorderLayout.CENTER);


pnlSouth=new JPanel(new BorderLayout());
pnlNorth1=new JPanel(new BorderLayout());
pnlWest=new JPanel();
pnlEast=new JPanel();
lbl5=new JLabel("性别");
cgSex=new ButtonGroup();
cm=new JRadioButton("男");
cf=new JRadioButton("女");
cgSex.add(cm);
cgSex.add(cf);

pnlWest.add(lbl5);
pnlWest.add(cm);
pnlWest.add(cf);
pnlNorth1.add(pnlWest,BorderLayout.WEST);
lbl6=new JLabel("年龄:");
tfAge=new JTextField(3);
pnlEast.add(lbl6);
pnlEast.add(tfAge);
pnlNorth1.add(pnlEast,BorderLayout.EAST);
pnlSouth.add(pnlNorth1,BorderLayout.NORTH);

pnlCenter4=new JPanel();
lbl7=new JLabel("班级所属:");
String[] sg={"计算机科学与技术01","计算机科学与技术02","物联网03","软件工程04"};
cclass=new JComboBox<String>(sg);//下拉框的使用
pnlCenter4.add(lbl7);
pnlCenter4.add(cclass);
pnlSouth.add(pnlCenter4,BorderLayout.CENTER);

pnlSouth1=new JPanel();
btnRegister=new JButton("注册");
btnReset=new JButton("重置");
btnCancel=new JButton("取消");
pnlSouth1.add(btnRegister);
pnlSouth1.add(btnReset);
pnlSouth1.add(btnCancel);
pnlSouth.add(pnlSouth1,BorderLayout.SOUTH);
this.add(pnlSouth,BorderLayout.SOUTH);
this.pack();
ButtonListener Listen=new ButtonListener();
btnRegister.addActionListener(Listen);
btnReset.addActionListener(Listen);
btnCancel.addActionListener(Listen);
}
}

StudentTest类(用户答题界面)

package testSystem;
import java.awt.*;
import java.util.ArrayList;

import javax.swing.*;
class StudentTest extends JFrame{
 	JPanel pnlNorth,pnlSouth,pnlCenter,pnlSouth1,pnlNorth1;
 	JButton Start,Lastq,Nextq,Submit;
 	JMenu fileMenu,editMenu;
 	JLabel lbl1,lbl2,lbl3,lbl4,lbl5,lbl6,lbl7;
 	JTextArea area;
 	JScrollPane pane;
 	CheckboxGroup choice;
 	Checkbox a,b,c,d;
 	Timer myTimer;
StudentTest(String title){
	super(title);init();
}
void init()
{
	fileMenu=new JMenu("文件");
	editMenu=new JMenu("编辑");
	JMenuBar menuBar=new JMenuBar();
	menuBar.add(fileMenu);
	menuBar.add(editMenu);
	JMenuItem tool=new JMenuItem("工具");
	fileMenu.add(tool);
	JCheckBoxMenuItem casemenuItem=new 	JCheckBoxMenuItem("区分大小写");
	fileMenu.add(casemenuItem);
	setJMenuBar(menuBar);
	//setSize(300,200);
	
	pnlNorth=new JPanel(new FlowLayout());

	lbl1=new JLabel("总的考试时间:100分钟");
	pnlNorth.add(lbl1);
	lbl2=new JLabel("剩余考试时间:100分钟");
	pnlNorth.add(lbl2);	
	Start =new JButton("开始考试");
	pnlNorth.add(Start);
	this.add(pnlNorth,BorderLayout.NORTH);
	
	pnlCenter=new JPanel(new FlowLayout());
	lbl3=new JLabel("第10题");
	lbl4=new JLabel("共10题");
	lbl5=new JLabel("考生:");
	lbl6=new JLabel(Login.name);
	//myTimer=new Timer(1000);
	pnlCenter.add(lbl3);
	pnlCenter.add(lbl4);
	pnlCenter.add(lbl5);
	pnlCenter.add(lbl6);
	this.add(pnlCenter,BorderLayout.CENTER);
	
	pnlSouth=new JPanel(new BorderLayout());
	pnlNorth1=new JPanel();
	pnlSouth1=new JPanel(new FlowLayout());
	String s="全国计算机等级考试考场规则\n"
			+ "(一)、考生于考前30分钟到达考场,入场时主动出示本人准考证和有效身份证件接受考试工作人员核验,并在《上机考场考生签到表》上签名。\n"
			+ "(二)、考生只准携带必要的考试文具(如钢笔,圆珠笔等)入场,不得携带任何书籍资料、通讯设备、数据存储设备、智能电子设备等辅助工具及其它未经允许的物品。\n"
			+"(三)、考生入场后,应对号入座,并将本人的准考证、有效身份证件放在课桌上。\n"	
			+"(四)、考生在计算机上输入自己的准考证号,并核验屏幕上显示的姓名、有效身份证件号码,如不相符,应立刻举手,与监考人员取得联系,说明情况。\n"
			+"(五)、核验无误后,待监考人员发布“考试开始”的指令后开始作答。\n"
			+"(六)、考试开始后,迟到考生不得进入考场。\n"
			+"(七)、考试时间由系统自动控制,计时结束后系统将自动退出作答界面。\n"
			+"(八)、考生在考场内应保持安静,严格遵守考场纪律。\n"
			+"(九)、在考试过程中,如果出现死机或系统错误等,应立刻停止操作,举手与监考人员联系。\n"
			+"(十)、考试时,严禁抄录有关试题信息。\n"
			+"(十一)、考生点击交卷后,举手与监考人员联系,等监考人员确认考生交卷正常后,方可离开。\n";
	area=new JTextArea(s,20,35);
	area.setEditable(false);
	area.setLineWrap(true);
	pane=new JScrollPane(area,JScrollPane.VERTICAL_SCROLLBAR_ALWAYS,JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
	pnlNorth1.add(pane);
	pnlSouth.add(pnlNorth1,BorderLayout.NORTH);

	lbl7=new JLabel("选项");
	pnlSouth.add(lbl7);
	choice=new CheckboxGroup();
	a=new Checkbox("a",choice,true);
	b=new Checkbox("b",choice,true);
	c=new Checkbox("c",choice,true);
	d=new Checkbox("d",choice,true);
	pnlSouth1.add(a);
	pnlSouth1.add(b);
	pnlSouth1.add(c);
	pnlSouth1.add(d);
	Lastq=new JButton("上一题");
	Nextq=new JButton("下一题");
	Submit=new JButton("提交");
	pnlSouth1.add(Lastq);
	pnlSouth1.add(Nextq);
	pnlSouth1.add(Submit);
	pnlSouth.add(pnlSouth1);
	this.add(pnlSouth,BorderLayout.SOUTH);
	setVisible(true);
	}
}

FileMange类(与文件操作相关)

package testSystem;
import java.io.*;
import java.util.ArrayList;
public class FileMange {

	public static void WriteFile(String s) //文件的写入
	{
		
	FileWriter fw=null;
	BufferedWriter bw=null;
	try{
		fw=new FileWriter("D:\\java_project\\TestSystem\\src\\testSystem\\user.txt",true);
		//使文件写入时不覆盖上一次的内容使其在后面追加
		bw=new BufferedWriter(fw);
		bw.append(s,0,s.length());
		bw.newLine();//写入行分隔符
		bw.flush();
		}
		catch(IOException e){System.out.println("写入文件出错");}
		finally{
		if(fw!=null){
			try {
			fw.close();
		} 
			catch (IOException e) {
			// TODO Auto-generated catch block
			System.out.println("关闭文件出错");
		}
		
		}	
		}
	}
	
	public static ArrayList ReadFile(int choce)//文件的读入
	{
		ArrayList PassWordList=new ArrayList();
		String s=new String();
		String[] sArray=new String[100];
		FileReader fr=null;//创建文件字符流
		BufferedReader br=null;//缓冲区读取
		//open
		try {
			
			 fr=new FileReader("D:\\java_project\\TestSystem\\src\\testSystem\\user.txt");
			 br=new BufferedReader(fr);//创建一个使用默认大小输入缓冲区的缓冲字符输入流
		while((s=br.readLine())!=null)//读取一个文本行。包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null 。 
		{
			//System.out.println(s);
			//sArray是一个人的信息
			sArray=s.split(" ");
			PassWordList.add(sArray[choce]);
		}
			} catch (FileNotFoundException e) {
			System.out.print("文件没有找到");
			// TODO Auto-generated catch block
		}
		catch(IOException e)
		{
			System.out.println("读文件出错");
		}finally{
			if(fr!=null){
				try {
				fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				System.out.println("关闭文件出错");
			}
			
				}	
			}
		return PassWordList;
	}
}

图形化界面的代码实际上很简单,只要理解清楚它逻辑上的布局(特别是多种布局的嵌套),而具体的组件,复选框或者下拉框等可以直接百度就可以用了,组件并没有特别难以理解的。代码要多敲,仅仅看别人的代码学习是没有用的。

发布了7 篇原创文章 · 获赞 21 · 访问量 7832
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览