栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java之GUI

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java之GUI

GUI介绍(一)常见的组件及简单监听器
  • 第一个窗口程序
  • 容器控件
  • JLabel控件
  • 简单事件处理
  • 文本框JTextFiled
  • 复选框JCheckBox
  • 下拉列表JComboBox

前段时间学了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);

	}
	}

因为这个窗口啥也没有,效果就是这样式的

容器控件

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

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

这时就有了一个按钮组件了

JLabel控件

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

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


常见的方法测试如下

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

(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("按钮被点击了!");				
			}			
		}
}

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


练习:点击按钮,获取当前时间(使用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);
		}

	}
}

效果如下

文本框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);
	}
}

效果如下

复选框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);
	}
}

效果如下

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

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

效果如下
点击前

点击后

下拉列表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 colorBox=new JComboBox();
		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);
		}
}

控制台输出

到此先告一段落!如果有小伙伴发现有问题的,敬请批评指正!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/851437.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号