Java基础第十八课(GUI图形用户界面)

前面我们一直都是用控制台进行信息的输入输出来写Java程序
但是我们平常见到的程序都是有好看的界面的
你可能会想难道Java不能做界面???
放心,Java可以说是很强大的
它是可以做出来的,只不过用Java写Windows窗口程序都太麻烦了
所以用Java来写的不多
但是我还是要讲一下滴
好啦 开始

一、简介及简单演示

我们平时电脑用的软件能看到的界面其实就是GUI(Graphic User Interface 图形用户界面)
而Swing是一个用于开发Java应用程序用户界面的开发工具包
这里我们就演示下Swing的基本用法
代码如下:

package com.baidu.demo.test13;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Demo1 {

	public static void main(String[] args) {
		
		//主窗体
		JFrame jFrame = new JFrame();
		
		//主窗体的大小(宽,高)
		jFrame.setSize(500,300);
		
		//设置主窗体标题
		jFrame.setTitle("测试");
		
		//设置程序显示的位置(x,y)
		//jFrame.setLocation(500,400);
		
		//主窗体中的组件设置为绝对定位(不使用提供的任何布局)
		jFrame.setLayout(null);
		
		//窗口居中显示
		jFrame.setLocationRelativeTo(null);
		
		//按钮组件
		JButton jButton = new JButton("点我变帅");
		
		//设置按钮的位置(x,y)和宽高
		jButton.setBounds(200, 100, 100, 50);
		
		//将按钮加入到主窗体中
		jFrame.add(jButton);
		
		// 关闭窗体的时候,退出程序
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//使窗体可见
		jFrame.setVisible(true);
	}

}

运行结果:
在这里插入图片描述

二、事件监听

刚刚我们虽然写出来了窗口程序
但是我们会发现,我们点击创建的按钮什么反应都没有
那么怎么才可以让它有反应呢?
其实也不难
这个就关系到我们的事件监听
我们可以使用事件监听来监听这一个按钮的事件
比如监听到这个按钮被单击就运行那端代码…
除了按钮监听,还有键盘监听、鼠标监听
代码演示:

package com.baidu.demo.test13;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Demo2 {

	public static void main(String[] args) {
		
		//主窗体
		JFrame jFrame = new JFrame();
		
		//主窗体的大小(宽,高)
		jFrame.setSize(500,300);
		
		//设置主窗体标题
		jFrame.setTitle("测试");
		
		//设置程序显示的位置(x,y)
		//jFrame.setLocation(500,400);
		
		//主窗体中的组件设置为绝对定位(不使用提供的任何布局)
		jFrame.setLayout(null);
		
		//窗口居中显示
		jFrame.setLocationRelativeTo(null);
		
		//按钮组件
		JButton jButton = new JButton("点我变帅");
		
		//设置按钮的位置(x,y)和宽高
		jButton.setBounds(200, 100, 100, 50);
		
		//按钮监听
		jButton.addActionListener(new ActionListener() {
			
			// 当按钮被点击时,就会触发 ActionEvent事件
            // actionPerformed 方法就会被执行
			@Override
			public void actionPerformed(ActionEvent e) {
				//点击按钮后在控制台打印下面的信息
				System.out.println("----------------------------------");
				System.out.println("我最帅");
			}
		});
		
		
		//键盘监听
		jButton.addKeyListener(new KeyListener() {
			//键被按下
			@Override
			public void keyPressed(KeyEvent e) {
				System.out.println("---------------------------------");
				System.out.println(e.getKeyChar()+"按键按下");
			}
			
			// 键被弹起
			@Override
			public void keyReleased(KeyEvent e) {
				System.out.println(e.getKeyChar()+"按键弹起");
			}
			
			// 一个按下弹起的组合动作
			@Override
			public void keyTyped(KeyEvent e) {
				System.out.println(e.getKeyChar()+"按下弹起的组合动作");
			}
		});
		
		//鼠标监听
		jFrame.addMouseListener(new MouseListener() {
			// 释放鼠标
			@Override
			public void mouseReleased(MouseEvent e) {
				System.out.println("释放鼠标");
			}
			
			// 按下鼠标
			@Override
			public void mousePressed(MouseEvent e) {
				System.out.println("按下鼠标");
			}
			
			// 鼠标退出
			@Override
			public void mouseExited(MouseEvent e) {
				System.out.println("鼠标退出");
			}
			
			// 鼠标进入
			@Override
			public void mouseEntered(MouseEvent e) {
				System.out.println("鼠标进入");
			}
			
			// 按下释放组合动作为点击鼠标
			@Override
			public void mouseClicked(MouseEvent e) {
				System.out.println("按下释放组合动作为点击鼠标");
			}
		});
		
		//将按钮加入到主窗体中
		jFrame.add(jButton);
		
		// 关闭窗体的时候,退出程序
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//使窗体可见
		jFrame.setVisible(true);
	}

}

运行结果(这里大家自行测试哦):
在这里插入图片描述

三、适配器

举个例子:
MouseAdapter 鼠标监听适配器
一般说来在写监听器的时候,会实现MouseListener。
但是MouseListener里面有很多方法实际上都没有用到,比如mouseReleased ,mousePressed,mouseExited等等。
这个时候就可以使用 鼠标监听适配器,MouseAdapter 只需要重写必要的方法即可。
代码如下:

package com.baidu.demo.test13;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Demo3 {

	public static void main(String[] args) {
		
		//主窗体
		JFrame jFrame = new JFrame();
		
		//主窗体的大小(宽,高)
		jFrame.setSize(500,300);
		
		//设置主窗体标题
		jFrame.setTitle("测试");
		
		//设置程序显示的位置(x,y)
		//jFrame.setLocation(500,400);
		
		//主窗体中的组件设置为绝对定位(不使用提供的任何布局)
		jFrame.setLayout(null);
		
		//窗口居中显示
		jFrame.setLocationRelativeTo(null);
		
		//鼠标监听适配器
		jFrame.addMouseListener(new MouseAdapter() {
			//鼠标按下
			@Override
			public void mousePressed(MouseEvent e) {
				System.out.println("鼠标按下");
			}
		});
		
		// 关闭窗体的时候,退出程序
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		//使窗体可见
		jFrame.setVisible(true);
	}

}

运行结果(点击鼠标后):
在这里插入图片描述
还有键盘监听也可以用适配器来写哦,这个你们自己试一下啦


由于Java并不常用来写Windows窗体应用
所以我就简单讲一下啦
还有各种控件的使用啊之类的都大同小异
我就不讲了
有兴趣的可以去手册里面看看学习下或者直接百度
还有就是软件的布局
Java有好几种布局,我也不讲了,感兴趣的看手册啦

整体来说,Java写窗体并不难,只要知道怎么布局、怎么使用各种控件、怎么进行事件监听…差不多也可以做一个软件出来了
你们可以试着写一个哦,反正是提升自我嘛,哈哈。

好啦,就这样吧
有问题QQ497099936
欢迎来撩骚
顾得白

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
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 ); } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值