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;
	}
}

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

  • 8
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java Swing框架创建一个简单的图形化界面的代码及方法: ```java import javax.swing.*; public class MyFrame extends JFrame { public MyFrame() { // 设置窗口标题 setTitle("My Frame"); // 设置窗口大小 setSize(300, 200); // 设置窗口在屏幕中央显示 setLocationRelativeTo(null); // 设置窗口关闭时退出程序 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 添加一个标签 JLabel label = new JLabel("Hello World"); add(label); // 显示窗口 setVisible(true); } public static void main(String[] args) { // 创建窗口对象 MyFrame frame = new MyFrame(); } } ``` 在上面的代码中,我们创建了一个继承自JFrame的MyFrame类,然后在构造函数中设置了窗口标题、大小、位置以及关闭方式,最后添加了一个标签,并显示了窗口。 使用JavaFX框架创建图形化界面的方法略有不同,在这里我们演示使用FXML语言来描述界面布局,使用Java代码来动态创建界面的方法。 首先,在src目录下创建一个名为sample的文件夹,然后在该文件夹下创建一个名为sample.fxml的文件,文件内容如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <?import javafx.scene.control.*?> <?import javafx.scene.layout.*?> <VBox xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml" fx:controller="sample.Controller"> <Label text="Hello World"/> <Button text="Click me!" onAction="#handleButtonAction"/> </VBox> ``` 在上面的代码中,我们使用VBox布局容器将一个标签和一个按钮组合在一起。 接下来,在src目录下创建一个名为Controller的Java类,代码如下: ```java package sample; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; public class Controller { @FXML private Label label; @FXML private Button button; @FXML private void handleButtonAction() { label.setText("Button clicked!"); } } ``` 在上面的代码中,我们使用@FXML注解将FXML文件中的标签和按钮与Java代码中的成员变量进行绑定,并在handleButtonAction()方法中实现按钮的点击事件。 最后,在src目录下创建一个名为Main的Java类,代码如下: ```java package sample; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends Application { @Override public void start(Stage primaryStage) throws Exception{ Parent root = FXMLLoader.load(getClass().getResource("sample.fxml")); primaryStage.setTitle("My JavaFX Application"); primaryStage.setScene(new Scene(root, 300, 275)); primaryStage.show(); } public static void main(String[] args) { launch(args); } } ``` 在上面的代码中,我们使用FXMLLoader加载sample.fxml文件,并将其作为根节点创建一个场景,然后设置窗口标题和大小,并显示窗口。 通过以上代码,我们就可以使用JavaFX框架创建一个简单的图形化界面了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值