Java之GUI简单介绍

这篇具有很好参考价值的文章主要介绍了Java之GUI简单介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前段时间学了GUI,总体上概念还是有点模糊,于是决定花点时间简单整理下。先简单介绍一下GUI,GUI就是图形用户界面。

Java提供了GUI相关的两个API:分别是AWT、Swing。
AWT是最早提供的GUI库,依赖本地平台,界面不好看,功能有限。之后推出了Swing,Swing并没有完全替代AWT,而是建立在AWT的拓展,是轻量级的界面设计库。
废话不多说,开始上代码!

第一个窗口程序

	public class MyDemo {
	public static void main(String[] args) {
		//JFrame指一个窗口
		JFrame frame=new JFrame("窗口案例");
		//关闭窗口时退出程序
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		//调整窗口大小
		frame.setSize(400,300);
		//显示窗口(放到程序后面,否则窗口可能显示不出来)
		frame.setVisible(true);

	}
	}

因为这个窗口啥也没有,效果就是这样式的
Java之GUI简单介绍

容器控件

当我们需要在窗口里边添加控件时,我们用到JPanel和JButton 其中JPanel表示一个容器,也称为面板。
JButton表示一个按钮控件 我们需要向窗口里边添加一个容器JPanel,然后在向容器内添加控件 ,还是刚刚MyDemo类,我们添加如下代码。

		//创建一个面板
		JPanel panel=new JPanel();
		//将面板添加到窗口中
		frame.setContentPane(panel);
		//添加按钮
		JButton button=new JButton("测试");
		panel.add(button);

这时就有了一个按钮组件了
Java之GUI简单介绍

JLabel控件

JLabel是标签控件,显示单行文本,其中相关的方法可见代码中的注释。

//继续在MyDemo类添加
JLabel label=new JLabel("java 你好!");
panel.add(label);

Java之GUI简单介绍
常见的方法测试如下

public class MyFrame extends JFrame{
		public MyFrame(String title) {
			super(title);
			//创建一个面板
			JPanel panel=new JPanel();
			//将面板添加到窗口中
			this.setContentPane(panel);
			//添加按钮
			JButton button=new JButton("测试");
			panel.add(button);
			
			JLabel label=new JLabel("JLabel标签测试");
			//设置字体
			label.setFont(new Font("微软雅黑",Font.PLAIN,14));
			//设置文字颜色
			label.setForeground(new Color(100,200,50));
			//设置背景色
			label.setOpaque(true);//背景色默认透明显示,设置不透明
			label.setBackground(new Color(100,30,100));
			//设置控件大小
			label.setPreferredSize(new Dimension(150, 30));//Dimension指定高度、宽度
			//设置文本居中对齐
			label.setHorizontalAlignment(SwingConstants.CENTER);
			panel.add(label);
		}
}

Java之GUI简单介绍

(ps:这里写了一个Myframe类继承Frame类,主要写控件的操作,下面的如果没有特别提示的话都是在Myframe类里面写的!)

简单事件处理

事件处理使用的是监听机制
步骤:
1、添加一个监听器类,实现ActionListener接口
2、设置监听器>
3、将监听器对象传给控件

Main方法所在的类如下
public class MyDemo {

	public static void main(String[] args) {
		//JFrame指一个窗口
		MyFrame frame=new MyFrame("窗口测试");
		//关闭窗口时退出程序
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);		
		//调整窗口大小
		frame.setSize(400,300);
		//显示窗口(放到程序后面,否则窗口可能显示不出来)
		frame.setVisible(true);

	}
}

监听事件所在的类
public class MyFrame extends JFrame{
		public MyFrame(String title) {
			super(title);
			//创建一个面板
			JPanel panel=new JPanel();
			//将面板添加到窗口中
			this.setContentPane(panel);
			//添加按钮
			JButton button=new JButton("测试");
			button.addActionListener(new MyactionListener());
			panel.add(button);
			JLabel label=new JLabel("java 你好!");
			panel.add(label);
		}
		
		private class MyactionListener implements ActionListener{

			@Override
			public void actionPerformed(ActionEvent e) {
				System.out.println("按钮被点击了!");				
			}			
		}
}

当点击按钮时,触发监听事件,控制台输出如下

Java之GUI简单介绍
练习:点击按钮,获取当前时间(使用SimpleDateFormat类获取当前时间)

public class MyFrame extends JFrame {
	JLabel timeJLabel = new JLabel("00:00:00");// 作为Myframe的属性,使内部类能够访问
	public MyFrame(String title) {
		super(title);
		// 创建一个面板
		JPanel panel = new JPanel();
		// 将面板添加到窗口中
		this.setContentPane(panel);
		// 添加按钮
		JButton button = new JButton("测试");
		button.addActionListener(new MyactionListener());
		panel.add(button);
		panel.add(timeJLabel);
	}
	private class MyactionListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			SimpleDateFormat sdf = new SimpleDateFormat("HH:MM:SS");
			String str = sdf.format(new Date());// 获取当前时间转化位字符串
			timeJLabel.setText(str);
		}

	}
}

效果如下
Java之GUI简单介绍

文本框JTextFiled

JTextFiled的相关的两个方法是setText(str)和getText()
添加监听事件,实现内容输出

public class MyFrame extends JFrame {
	JTextField jField = new JTextField(20);
	JButton button = new JButton("点我");
	JTextField jField2 = new JTextField(20);

	public MyFrame(String title) {
		super(title);
		// 创建一个面板
		JPanel panel = new JPanel();
		// 将面板添加到窗口中
		this.setContentPane(panel);

		jField.setText("我是一个文本框");
		button.addActionListener(new ButtonActionListener());
		panel.add(jField);
		panel.add(button);
		panel.add(jField2);
	}

	public class ButtonActionListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			test();
		}
	}
	public void test() {
		String str = jField.getText();
		jField2.setText(str);
	}
}

效果如下
Java之GUI简单介绍

复选框JCheckBox

JCheckBox相关的方法
setSelected(true/false)设置选中状态
isSelect()是否选中
addActionListener()勾选或取消获取事件

public class MyFrame extends JFrame {
	JCheckBox agreeBox = new JCheckBox("同意用户协议");
	JCheckBox agreeBox1 = new JCheckBox("取消");
	JButton nextButton = new JButton("下一步");

	public MyFrame(String title) {
		super(title);
		// 创建一个面板
		JPanel panel = new JPanel();
		// 将面板添加到窗口中
		this.setContentPane(panel);

		panel.add(agreeBox);
		panel.add(agreeBox1);
		panel.add(nextButton);
	}
}

效果如下
Java之GUI简单介绍
练习:添加功能,当复选框没有选择时,默认按钮是不可选的,既无法进行下一步操作,当选中“同意用户协议后“,会弹出对话信息框。

public class MyFrame extends JFrame {
	JCheckBox agreeBox = new JCheckBox("同意用户协议");
	JCheckBox agreeBox1 = new JCheckBox("取消");
	JButton nextButton = new JButton("下一步");
	JPanel panel = new JPanel();

	public MyFrame(String title) {
		super(title);
		// 将面板添加到窗口中
		this.setContentPane(panel);
		panel.add(agreeBox);
		panel.add(agreeBox1);
		panel.add(nextButton);
		// 界面初始化
		nextButton.setEnabled(false);
		// 给CheckBox添加事件处理
		agreeBox.addActionListener(new CheckBoxListener());
		nextButton.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(panel, "欢迎!");
			}

		});
	}

	public class CheckBoxListener implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {

			if (agreeBox.isSelected()) {
				nextButton.setEnabled(true);
			} else
				nextButton.setEnabled(false);
		}
	}
}

效果如下
点击前
Java之GUI简单介绍
点击后
Java之GUI简单介绍

下拉列表JComboBox

JComboBox colorFiled=new JComboBox<>();
JComboBox是一个泛型,参数类型T表示的是数据项的类型
数据项
addItem() 添加数据项
getItemCount()获取数据项个数
getItemAt(index)获取数据项

按索引访问
getSelectedIndex()获取选中项的索引
setSelectedIndex()设置选中项
remove(index)删除索引

按数据项访问
getSelectedItem() 获取数据项
setSelectedItem()设置数据项
remove(item)删除

public class MyFrame extends JFrame{
	JComboBox<String> colorBox=new JComboBox<String>();
		public MyFrame(String title) {
			super(title);
			//创建一个面板
			JPanel panel=new JPanel();
			//将面板添加到窗口中
			this.setContentPane(panel);
			//下拉列表	
			colorBox.addItem("红色");
			colorBox.addItem("绿色");
			colorBox.addItem("蓝色");
			panel.add(colorBox);
			//测试按钮
			JButton testButton=new JButton("测试");
			panel.add(testButton);
			testButton.addActionListener(new testButtonListener());
		}
		public class testButtonListener implements ActionListener{

			@Override
			public void actionPerformed(ActionEvent e) {
				test();
			}
		}
		public void test() {
			//获取个数
			Object a=colorBox.getSelectedItem();
			int count=colorBox.getItemCount();
			String value=colorBox.getItemAt(0);
			System.out.println("数据项个数:"+count+"索引值:"+value);
			System.out.println(a);
		}
}

控制台输出
Java之GUI简单介绍

布局管理器LayoutManager

当把控件添加到窗口后,由布局管理器对每一个子控件进行布局。
默认JPanel自带一个FlowLayout流式布局器,就是流水线一样从左到右,从上到下进行布局。

边界布局管理器BorderLayout

BorderLayout将容器分为东、西、南、北、中5个区域,然后每个区域来放置子控件

public class MyFrame extends JFrame{
		public MyFrame(String title) {
			super(title);
			//创建一个面板
			JPanel panel=new JPanel();
			//将面板添加到窗口中
			this.setContentPane(panel);
			//设置布局器
			BorderLayout borderLayout=new BorderLayout();
			panel.setLayout(borderLayout);
			ColorLabel cLabel1=new ColorLabel("东", Color.YELLOW);
			ColorLabel cLabel2=new ColorLabel("南", Color.GREEN);
			ColorLabel cLabel3=new ColorLabel("西", Color.LIGHT_GRAY);
			ColorLabel cLabel4=new ColorLabel("北", Color.cyan);
			ColorLabel cLabel5=new ColorLabel("中", Color.red);
			panel.add(cLabel1,borderLayout.EAST);
			panel.add(cLabel2,borderLayout.SOUTH);
			panel.add(cLabel3,borderLayout.WEST);
			panel.add(cLabel4,borderLayout.NORTH);
			panel.add(cLabel5,borderLayout.CENTER);

		}
	public static class ColorLabel extends JLabel {
		public ColorLabel(String text,Color color) {
			this.setText(text);
			this.setOpaque(true);
			this.setBackground(color);
			this.setPreferredSize(new Dimension(60,30));
			this.setHorizontalAlignment(SwingConstants.CENTER);
		}
	}
}

显示效果如下
Java之GUI简单介绍

手工布局

1、不使用布局器 panel.setLayout(null);
2、添加某个子控件 panel.add(a1)
3、指定子控件的位置大小,a1.setBounds(x,y,w,h)(x、y表示坐标,w、h表示宽度和高度)

public class MyFrame extends JFrame{
		public MyFrame(String title) {
			super(title);
			//创建一个面板
			JPanel panel=new JPanel();
			//将面板添加到窗口中
			this.setContentPane(panel);
			//设置布局器		
			panel.setLayout(null);
			ColorLabel cLabel1=new ColorLabel("我要呆在中间", Color.YELLOW);
			cLabel1.setBounds(100,40,150,180);
			panel.add(cLabel1);
		}
	public static class ColorLabel extends JLabel {
		public ColorLabel(String text,Color color) {
			this.setText(text);
			this.setOpaque(true);
			this.setBackground(color);
			this.setPreferredSize(new Dimension(60,30));
			this.setHorizontalAlignment(SwingConstants.CENTER);
		}
	}
}

显示效果如下
Java之GUI简单介绍
缺点:当窗口放大或缩小时,自定义布局不能自适应大小文章来源地址https://www.toymoban.com/news/detail-456097.html

到了这里,关于Java之GUI简单介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 图像生成概念简单介绍

    图像生成是指使用计算机算法生成图像的过程。这些图像可以是真实的照片、绘画、3D渲染或者是完全想象的图像。图像生成技术涵盖了一系列算法,包括基于规则的方法、基于统计学的方法、深度学习等。 从技术角度看,图像生成是一种计算机图形学的应用,它可以模拟现

    2024年02月10日
    浏览(41)
  • ImGui基础概念和简单函数介绍

    ImGui(Dear ImGui)是一个用于在C++应用程序中创建图形用户界面(GUI)的轻量级库。它设计用于快速、简便地在应用程序中嵌入调试和工具界面。以下是一些常用的ImGui函数及其简要介绍: ImGui::Begin() / ImGui::End() : 作用: 定义一个可嵌套的区域,开始和结束ImGui的绘图。 示例:

    2024年01月19日
    浏览(39)
  • 简单介绍数据结构的基本概念

    数据 数据(Data)是 客观事物的符号表示 ,是 所有能输入到计算机中并被计算机程序处理的符号的总称 。例如:整数、字符串、图形、图像、声音和动画等 数据元素 数据元素(Data Element)是 数据的基本单位 ,有时也可被称为元素、记录等。 在计算机中通常作为一个整体

    2024年02月19日
    浏览(32)
  • odoo17核心概念view7——listview总体框架分析

    这是view系列的第七篇文章,今天主要介绍我们最常用的list视图。 跟formview基本一样的格式,只是结构体里面少了compiler,可能是用了基类ViewCompiler。 跟表单控制有关的部分, 增删改查按钮,搜索框,分页等 list主体内容的渲染,其实就是渲染了一个表格, 对list视图的扩展也

    2024年02月04日
    浏览(29)
  • 决策树模型(1)总体介绍

    决策树模型顾名思义就是通过一条条的决策来将样本划分来从而达到分类或回归的目的。决策树模型呈树形结构,下图粗略展示了一个分类决策树 其中圆表示特征,方块表示叶子节点也是最终分类的类别,我们通过利用样本中高价值的特征(房子拥有情况,工作的拥有情况)来

    2024年03月23日
    浏览(29)
  • Unity界面总体介绍

    官方​​​​​​​Unity 的界面介绍 界面示意图 (A) 工具栏 提供对您的 Unity 帐户、Unity 云服务和 Unity Collaborate、播放、暂停和步进控件以及全局搜索、图层可见性菜单和编辑器布局菜单(为编辑器窗口,并允许您保存自己的自定义布局)。 (B) Hierachy 窗口 :[ˈhaɪərɑːrki] 层

    2024年02月09日
    浏览(32)
  • 【C++】多态的概念和简单介绍、虚函数、虚函数重写、多态构成的条件、重载、重写、重定义

        C++中的多态是一种面向对象编程的特性, 它允许不同的对象对同一个消息做出不同的响应。 多态性能够提高代码的可复用性和灵活性,使得代码更加模块化和可扩展。    多态性是通过使用继承和虚函数实现的。 当一个类被声明为虚函数时,它可以被子类重写,并

    2024年02月13日
    浏览(33)
  • iOS总体框架介绍和详尽说明

    iOS是由苹果公司开发的移动操作系统,为iPhone、iPad、iPod Touch等设备提供支持。iOS采用了基于Unix的核心(称为Darwin),并采用了类似于Mac OS X的图形用户界面。以下是iOS的总体框架介绍和详尽说明: UIKit框架 :UIKit是构建iOS应用程序用户界面的主要框架。它包括了各种视图控

    2024年02月22日
    浏览(33)
  • 云计算基础设施总体架构介绍

    云计算基础设施是指由硬件资源和资源抽象控制组件构成的支撑云计算的基础设施,包括为云服务客户提供计算资源、存储资源、网络资源、安全资源所需的软硬件设备及云管理平台。云计算基础设施总体架构如图1 所示。 图1 云计算基础设施总体架构  资源池包括计算资源

    2024年02月11日
    浏览(29)
  • 学了那么长时间的编程,C语言的各种操作符都搞不懂?点开这里有详细的介绍—>

    目录 前言 一、原码、反码、补码的基础概念 1.原码 2.反码 3.补码 二、原码、反码、补码的计算方法 1.原码 2.反码 3.补码 三、算术操作符 四、移位操作符 1. 左移操作符 移位规则: 2. 右移操作符 移位规则: (1) 逻辑移位 (2) 算术移位 五、位操作符 1. 按位与运算(AND)

    2024年02月10日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包