Java GUI的简单使用

java的GUI就是java的图形用户界面,我看网上很多人都说java其实不太适合做GUI,因为太麻烦,也不太美观,要想美观一点就非常麻烦,但是对于为了完成实验的大二学生是足够用了。
我接触java的GUI是为了给软件构造的实验应用做一个图形界面,因为我觉得这个应用用命令行实现实在是太难看了,所以决定用Java的GUI。本文章适合急需使用java GUI的童鞋。
我实验里的应用是一个航班管理系统,需要实现设置资源,设置位置,设立航班,分配飞机等等功能,所以我们的应用主体是一个菜单,在上面设置各种功能按钮来进行管理操作,先看成果:在这里插入图片描述由于我要同时实现三个App,所以我先创建了一个App抽象类,创建按钮。

//App抽象类
public abstract class App <R>{
	protected JButton AddResource = new JButton("添加资源");
	protected JButton DeleteResource = new JButton("删除资源");
	protected JButton Addlocation = new JButton("添加位置");
	protected JButton Deletelocation = new JButton("删除位置");
	protected JButton addEntry = new JButton("添加计划项");
	protected JButton cancelEntry = new JButton("取消计划项");
	protected JButton setResource = new JButton("设置资源");
	protected JButton runEntry = new JButton("启动计划项");
	protected JButton changeLocation = new JButton("更改教室位置");
	protected JButton endEntry = new JButton("结束计划项");
	protected JButton findState = new JButton("查看当前状态");
	protected JButton findConflict = new JButton("检查冲突");
	protected JButton findPre = new JButton("查找前序计划项");
	protected JButton board = new JButton("显示时间表");
	protected JButton blockEntry = new JButton("阻塞计划项");
	protected JButton fileEntry = new JButton("读入计划项");
	protected JButton searchLog = new JButton("日志查询");
	//设置按钮监听,点击一个按钮执行相应的功能
	public App () {
		AddResource.addActionListener((e)->{
			Addresource();
		});
		DeleteResource.addActionListener((e)->{
			DeleteResource();
		});
		Addlocation.addActionListener((e)->{
			AddLocation();
		});
		Deletelocation.addActionListener((e)->{
			deleteLocation();
		});
		addEntry.addActionListener((e)->{
			addEntry();
		});
		cancelEntry.addActionListener((e)->{
			cancelEntry();
		});
		setResource.addActionListener((e)->{
			setResource();
		});
		runEntry.addActionListener((e)->{
			runEntry();
		});
		changeLocation.addActionListener((e)->{
			changeLocation();
		});
		endEntry.addActionListener((e)->{
			endEntry();
		});
		findState.addActionListener((e)->{
			findState();
		});
		findConflict.addActionListener((e)->{
			findConflict();
		});
		findPre.addActionListener((e)->{
			findPre();
		});
		board.addActionListener((e)->{
			showBoard();
		});
		blockEntry.addActionListener((e)->{
			blockEntry();
		});
		fileEntry.addActionListener((e)->{
			construct();
		});
		searchLog.addActionListener((e)->{
			searchLog();
		});
	}
}
//航班管理系统继承App抽象类
public class FlightScheduleApp extends App<Plane> {
	
	public FlightScheduleApp(){
		schedule = new FlightSchedule();
	}

	@Override
	public void init() {
		//创建窗口
		JFrame jf = new JFrame("航班管理系统");
		//设置中间容器
		JPanel panel1 = new JPanel();
		//添加按钮
		panel1.add(AddResource);
		panel1.add(DeleteResource);
		panel1.add(Addlocation);
		panel1.add(Deletelocation);
		panel1.add(addEntry);
		panel1.add(cancelEntry);
		panel1.add(setResource);
		panel1.add(runEntry);
		panel1.add(endEntry);
		panel1.add(findState);
		panel1.add(findConflict);
		panel1.add(findPre);
		panel1.add(board);
		panel1.add(fileEntry);
		panel1.add(searchLog);
		//设置为2行2列的网格布局,由于我的组件过多,自动增加网格列数,行数不变
		GridLayout gf = new GridLayout(2, 2);
		panel1.setLayout(gf);
		//添加中间容器
		jf.add(panel1);
		//设置窗口大小
		jf.setSize(1000, 500);
		jf.setLocation(200, 200);
		//设置关闭方式,由于该窗口为应用主菜单,设置为点击关闭即为所有窗口全部关闭,程序运行结束
	   jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	   //可视化
		jf.setVisible(true);
	}

主菜单就设置好了,然后我挑一个按钮展示一下。第一个功能添加资源,点击该按钮,弹出一个新的窗口,供用户设立一个新的飞机,用户填写飞机编号,机龄,座位数等,注意此时主菜单没有关闭。
在这里插入图片描述
这个窗口的构建,需要标签,输入框,按钮三个组件,分别用Jlabel,JTextField,JButton来实现。

@Override
	public void Addresource() {
		java.awt.Dimension dim2 = new java.awt.Dimension(50, 50);// 标签的大小
		java.awt.Dimension dim3 = new java.awt.Dimension(250, 30);// 输入框的大小
		java.awt.Dimension dim4 = new java.awt.Dimension(100, 40);
		JFrame jf = new JFrame("添加资源");
		JPanel jPanel = new JPanel();

		JLabel namelabel = new JLabel("编号:");
		namelabel.setPreferredSize(dim2);//设置大小
		jPanel.add(namelabel);

		JTextField nametext = new JTextField();
		nametext.setPreferredSize(dim3);
		jPanel.add(nametext);

		JLabel sexlabel = new JLabel("类型:");
		sexlabel.setPreferredSize(dim2);
		jPanel.add(sexlabel);

		JTextField sextext = new JTextField();
		sextext.setPreferredSize(dim3);
		jPanel.add(sextext);

		JLabel idlabel = new JLabel("座位数:");
		idlabel.setPreferredSize(dim2);
		jPanel.add(idlabel);

		JTextField idtext = new JTextField();
		idtext.setPreferredSize(dim3);
		jPanel.add(idtext);

		JLabel worklabel = new JLabel("机龄:");
		worklabel.setPreferredSize(dim2);
		jPanel.add(worklabel);

		JTextField worktext = new JTextField();
		worktext.setPreferredSize(dim3);
		jPanel.add(worktext);

		JButton button = new JButton("确定");
		button.setPreferredSize(dim4);
		//设立监听
		button.addActionListener((e) -> {
			String a = nametext.getText(); 
			String b = sextext.getText();
			String c = idtext.getText();
			String d = worktext.getText();
			if (!a.isEmpty() && !b.isEmpty() && !c.isEmpty() && !d.isEmpty()) {
				try {
					schedule.addResource(a, b, c, d);
					input("操作成功!");
				} catch (Exception e2) {
					input(e2.getMessage());
				}
			} else {
				input("操作失败!");
			}
		});
		jPanel.add(button);
		// 选择布局类型,定义流式布局的对象,并且设置每个组件之间相隔5cm
		java.awt.FlowLayout fl = new java.awt.FlowLayout(FlowLayout.CENTER, 5, 5);
		jPanel.setLayout(fl);// 设置顶级容器的布局为流式布局
		jf.add(jPanel);
		jf.setSize(350, 400);
		jf.setLocation(200, 200);
		jf.setResizable(false);
		//设置关闭方式为只关闭当前窗口
		jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		jf.setVisible(true);
	}

	/**
	 * 输出警告
	 */
	public void input(String data) {
		JFrame jf = new JFrame();
		JLabel label = new JLabel(data);
		jf.add(label, BorderLayout.CENTER);
		jf.setSize(410, 150);
		jf.setLocation(200, 200);
		jf.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		jf.setVisible(true);
	}

我采用input函数输出相应信息,一个窗口加一个标签就可以完成,如下图:
在这里插入图片描述
除了主菜单关闭为全部关闭外,其他窗口关闭都设置为仅关闭当前窗体,这样一个应用模型就完成了,相关功能的函数就不涉及GUI了,将所有功能全都整合到一个schedule类里,实现了应用与操作的分离。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
javaGUI图形界面 public class login extends JFrame { private JComboBox nameJComboBox; private JPanel userJPanel; private JLabel pictureJLabel; private JButton okJButton,cancelJButton; private JLabel nameJLabel,passwordJLabel,note; private JPasswordField passwordJPasswordField; private String name1; private String password1; private String user; private ImageIcon myImageIcon; public login( ) { createUserInterface(); // 调用创建用户界面方法 } private void createUserInterface() { Container contentPane = getContentPane(); contentPane.setLayout( null ); userJPanel = new JPanel(); userJPanel.setBounds( 35, 120, 300, 96 ); userJPanel.setBorder(BorderFactory.createEtchedBorder() ); //显示一圈边儿 userJPanel.setLayout( null ); contentPane.add( userJPanel ); nameJComboBox = new JComboBox(); nameJComboBox.setBounds( 100, 12, 170, 25 ); nameJComboBox.addItem( "admin" ); nameJComboBox.addItem( "aloie" ); nameJComboBox.setSelectedIndex( 0 ); nameJComboBox.setEditable(true); userJPanel.add( nameJComboBox ); pictureJLabel=new JLabel(); pictureJLabel.setBounds(45,0,380,118); pictureJLabel.setIcon(new ImageIcon("pic.gif")); contentPane.add(pictureJLabel); nameJLabel=new JLabel("姓 名:"); nameJLabel.setBounds(20,12,80,25); userJPanel.add(nameJLabel); passwordJPasswordField=new JPasswordField(); passwordJPasswordField.setBounds(100,60,170,25); userJPanel.add(passwordJPasswordField); passwordJLabel=new JLabel("密 码:"); passwordJLabel.setBounds(20,60,80,25); userJPanel.add(passwordJLabel); note=new JLabel("密码与用户名相同"); note.setBounds(0,295,180,25); add(note); okJButton=new JButton("登 陆"); okJButton.setBounds(60,250,80,25); contentPane.add(okJButton); okJButton.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { okJButtonActionPerformed(event); } } ); cancelJButton=new JButton("取 消"); cancelJButton.setBounds(210,250,80,25); contentPane.add(cancelJButton); cancelJButton.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent event ) { System.exit(0); //退出登陆 } } ); setTitle( "登陆窗口" ); setSize( 380, 350 ); setResizable( false ); //将最大化按钮设置为不可用 } private void okJButtonActionPerformed( ActionEvent event ) { //okJButton响应事件,检查用户名和密码的匹配 name1= nameJComboBox.getSelectedItem().toString(); if (name1.equals("admin") ) { if (passwordJPasswordField.getText().equals("admin")) { showNewWindow(); setVisible( false); } else { JOptionPane.showMessageDialog( this,"密码错误,拒绝登陆", "密码错误 !", JOptionPane.ERROR_MESSAGE ); } } else if (name1.equals("aloie")) { if ( passwordJPasswordField.getText().equals("aloie") ) { showNewWindow(); setVisible(false); } else { JOptionPane.showMessageDialog( this,"密码错误,拒绝登陆", "密码错误 !", JOptionPane.ERROR_MESSAGE ); } } } public void showNewWindow() { JFrame jf=new JFrame("main Frame"); jf.setSize(500,400); jf.setVisible(true); jf.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } public static void main( String[] args ) { JFrame.setDefaultLookAndFeelDecorated(true); login mylogin = new login( ); mylogin.setVisible( true ); mylogin.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE ); } }
Java GUIJava提供的一种图形用户界面编程方式,可以使用Java Swing类库来实现。下面是一个简单Java GUI登录界面的示例代码: ``` import javax.swing.*; import java.awt.*; import java.awt.event.*; public class Login extends JFrame implements ActionListener { JLabel l1, l2; JTextField tf1; JPasswordField pf; JButton btn1, btn2; Login() { setTitle("Login Form"); setLayout(null); l1 = new JLabel("Username:"); l1.setBounds(50, 70, 100, 20); add(l1); tf1 = new JTextField(); tf1.setBounds(150, 70, 150, 20); add(tf1); l2 = new JLabel("Password:"); l2.setBounds(50, 120, 100, 20); add(l2); pf = new JPasswordField(); pf.setBounds(150, 120, 150, 20); add(pf); btn1 = new JButton("Login"); btn1.setBounds(50, 170, 100, 20); btn1.addActionListener(this); add(btn1); btn2 = new JButton("Cancel"); btn2.setBounds(200, 170, 100, 20); btn2.addActionListener(this); add(btn2); setSize(400, 300); setVisible(true); } public void actionPerformed(ActionEvent e) { if (e.getSource() == btn1) { String username = tf1.getText(); String password = new String(pf.getPassword()); if (username.equals("admin") && password.equals("admin")) { JOptionPane.showMessageDialog(this, "Login successful"); } else { JOptionPane.showMessageDialog(this, "Invalid username or password"); } } else if (e.getSource() == btn2) { System.exit(0); } } public static void main(String[] args) { new Login(); } } ``` 该示例代码使用了JFrame、JLabel、JTextField、JPasswordField、JButton等Swing组件来构建登录界面,实现了登录和取消功能。用户可以在用户名和密码框中输入相应的信息,点击“Login”按钮进行登录验证,点击“Cancel”按钮退出程序。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值