Java swing 学习笔记自用
自用的,不是闲着无聊的建议不要看,不专业不认真不是分享态度,纯属自用。
看的b站视频:Java Swing入门课程_图形界面GUI编程_100集视频教程
讲得贼好贼细,不过时间太长了。而且没学过Java的估计有点难度,直接上了内部类匿名内部类。
一、首先把窗口存放于Java文件MyDemo中,MyDemo只设置最基础的窗口参数:
public class MyDemo {public static void main(String[] args) {JFrame frame = new MyFrame("ohyeah"); //窗口名frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //当关闭窗口时,结束运行frame.setSize(700,500); //长宽frame.setVisible(true); //显示窗口}
}
二、具体细节放在另一个java文件MyFrame中,MyFrame继承JFrame,这样它会有JFrame的所有功能:
public class MyFrame extends JFrame { ……
三、在里面放一个同名构造方法,里面就可以放置各种东西了!
public MyFrame(String title) {super(title);……
四、里面放的东西:
1.容器 JPenel
JPanel root = new JPanel(); //容器,一个面板
this.setContentPane(root); //设置一个容器
注意:因为是在构造方法里所以用this喔!
2.按钮 JButton
JButton button = new JButton("test"); //一个按钮
root.add(button); //向容器中添加一个按钮控件
3.事件处理 ActionListener
事件处理的代码大概就是:先定义一个按钮或者复选框之类的,然后用内部类button.addActionListener……(详见下面代码第三行开始。内部类的大括号里面可以写任何你希望点击按钮/点击复选框以后发生的事。)
内部类简洁写法(一般建议使用):
以下是点击button后,将会展示当前时间的代码。其中包含时间控件和获取当前时间。
JLabel timelabel = new JLabel("00:00:00");root.add(timelabel); //添加时间控件button.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {System.out.println("test: 我被点了");//取得当前时间SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");String timeStr = sdf.format(new Date());//System.out.println(timeStr);timelabel.setText(timeStr); //把时间写入label}});
还有复杂但是保险的非内部类写法,偶尔使用内部类写法会出莫名其妙的错,但是我懒得重新打一遍了……所以就用上面那种吧。如有需要再回看视频P12。
4.文本框输入 JTextField
相关API:
setText():事先在文本框中放入字符串
getText():获取文本框中输入的字符串
//文本框输入JTextField textField = new JTextField(20); //这个20是指20个英文字母的长度
这段放在构造方法外面,作为MyFrame的属性之一,方便使用。(上)
再在构造方法里把他添加到容器root中。(下)
//文本框输入root.add(textField);String strset = "ohye";textField.setText(strset);JButton button1 = new JButton("OK");root.add(button1);button1.addActionListener( new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {test();}});
public void test(){String strget = textField.getText();System.out.println(strget);}
注意:这里使用了上面事件处理的代码咯!可以复习一下。
注意注意:test()的代码放在构造方法外面
相关API:
setSelected(true/false) //设置选中状态
isSelected //是否选中
addActionListener //勾选或取消获取事件
//复选框JCheckBox agreeFiled = new JCheckBox("同意用户协议");
这段放在构造方法外面,作为MyFrame的属性之一,方便使用。(上)
再在构造方法里把他添加到容器root中。(下)
//复选框root.add(agreeFiled);JButton button2 = new JButton("下一步");root.add(button2);agreeFiled.setSelected(false); //设置初始选中状态为不选中button2.setEnabled(false); //把按钮一开始设为禁用状态agreeFiled.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {boolean isSelected = agreeFiled.isSelected();if(isSelected==true){button2.setEnabled(true);}elsebutton2.setEnabled(false);}});
这段代码是关于实现:不勾选复选框就禁用button2,勾选复选框就允许使用button2,一个联动效果。
5.下拉列表 JComboBox
数据项:
addItem() //添加数据项
getItemCount() //获取数据项的个数
getItemAt(int) //获取数据中的某项
//下拉列表JComboBox<String> colorFiled = new JComboBox<>();
下拉列表比较特殊,有点类似于ArrayList的列表形式。注意,同样把这一行踢去构造方法外。
JComboBox<T> 这里的T是泛型,代表列表存放的数据类型,可以是任何类型。
//下拉列表root.add(colorFiled);colorFiled.addItem("红");colorFiled.addItem("黄");colorFiled.addItem("蓝");root.add(colorFiled);//添加一个测试按钮JButton button3 =new JButton("测试");root.add(button3);button3.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {testComboBox();}});
(上)构造方法内:都和上面类似啦
(下)构造方法外:试用了下拉列表的API
public void testComboBox(){System.out.println(colorFiled.getItemCount());System.out.println(colorFiled.getItemAt(0));}
more about下拉列表:
当 JComboBox<T> 中的T为Student类这样的数据类,注意一定要重写toString()方法
toString()中写的是什么,在下拉列表中就会显示什么。
这个代码不搞了,累。如有需要用就看视频P18。
6.标签控件 JLabel
JLabel label = new JLabel();root.add(label);label.setText("ohyeyeye你好 ");
相关API:常用的就这些,其他要用再说吧
label.setFont(new Font("宋体",Font.ITALIC,14)); //设置字体、粗体、字号label.setForeground(new Color(255,0,0)); //设置颜色,颜色是rgb颜色label.setOpaque(true); //在这之前的背景都是默认为透明的,因此需要这行代码让他不透明label.setBackground(new Color(100,200,200)); //设置背景色label.setPreferredSize(new Dimension(200,30)); //设置控件大小,默认情况下是正好包含字的大小label.setHorizontalAlignment(SwingConstants.CENTER); //关于对齐
这些好难记,我一般就打出Font.然后直接找,有粗体、斜体之类的。
IDEA还有直接给rgb颜色看的,就很方便。
但如果有多个控件,一个一个设置肯定太麻烦,可以设置一个private类(放在构造函数外面):
private static class ColorLabel extends JLabel{public ColorLabel(String text, Color bgColor){this.setText(text);this.setOpaque(true);this.setBackground(bgColor); //设置背景色this.setPreferredSize(new Dimension(50,40)); //设置控件大小,默认情况下是正好包含字的大小this.setHorizontalAlignment(SwingConstants.CENTER); //关于对齐}}
构造函数内:
JLabel label1 = new ColorLabel("1",Color.YELLOW);JLabel label2 = new ColorLabel("2",Color.MAGENTA);JLabel label3 = new ColorLabel("3",Color.ORANGE);JLabel label4 = new ColorLabel("4",Color.PINK);root.add(label1);root.add(label2);root.add(label3);root.add(label4);
然后就是这样子~
7.布局管理器 LayoutManager
相关API:
.setlayout() // 设置管理器
.getlayout() // 获取管理器
(JPanel自带一个FlowLayout流式布局器,对子控件从上到下从左到右依次排列)
这样可以看到 JPanel root 的布局器为FlowLayout。
常用布局器
1.BorderLayout 边界布局器
root.setLayout( new BorderLayout() );root.add(label1,BorderLayout.NORTH);root.add(label2,BorderLayout.SOUTH);root.add(label3,BorderLayout.EAST);root.add(label4,BorderLayout.WEST);root.add(label5,BorderLayout.CENTER);LayoutManager lm = root.getLayout();System.out.println(lm);
1,2区域宽度无法调整,高度可以通过以下来调整。
label1.setPreferredSize( new Dimension(0,100));
同理3,4区域高度无法调整,宽度可以调整。5区域都不能调整。
2.手工布局
虽然比较麻烦,但是效果很好。
root.setLayout( null ); //取消原布局
root.add(label1); //添加控件
label1.setBounds(0,0,100,50); //设置位置以及参数
首先容器 setLayout 为空,然后添加控件到容器中,再用setBounds(x , y , width , heigth)
x,y就是屏幕左上角为原点的x,y轴,x轴向右递增,y轴向下递增。width,height顾名思义。
3.自定义布局器
添加一个类MyLayout 接口 LayoutManager2
点击 Implement methods 或者直接 Alt+Shift+Enter
点击OK
然后会出现很多方法,我们要重写这些方法来完成自己的布局。
接着就可以在MyFrame中调用MyLayout:
root.setLayout( new MyLayout() );
root.add(label1);
LayoutManager lm = root.getLayout();
System.out.println(lm);
虽然运行后并不会发生任何事(因为我们还没有在里面重写方法),但是getLayout时已经可以看到MyLayout
控件的布局 layoutContaniner
我们在MyLayout中进行布局,其中有很多方法,但是主要关心的就是以下三个:
void addLayoutComponent(Component comp,Object constraints) :
把一个子控件加入容器里后,内部会调用这个方法;
void removeLayoutComponent(Component comp) :
把一个子控件从容器里删除时,内部会调用这个方法;
void layoutContainer(Container parent) :
容器需要布局时会调用这个方法,主要的布局程序写在这里面。
Java swing 学习笔记自用相关推荐
- Java零基础笔记自用版(一)
系列文章目录 一.Java零基础笔记自用版(一) 目录 系列文章目录 前言 一.⭐️Java概述 二.⭐️变量 三.⭐️运算符 四.⭐️控制结构 五.⭐️数组.排序.查找 写在最后 前言 最近在学习J ...
- 尚学堂JAVA基础学习笔记_2/2
尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...
- Swing学习笔记目录
本篇文章总结一下全部的Swing笔记,算得上是一个大纲了吧. 本篇笔记目录全部摘抄自网上系列教程,由本人整合而来,也算是记录一下自己的学习经历.要转载的请注明出处,谢谢. Swing学习笔记 1. S ...
- 尚学堂JAVA高级学习笔记_1/2
尚学堂JAVA高级学习笔记 文章目录 尚学堂JAVA高级学习笔记 写在前面 第1章 手写webserver 1. 灵魂反射 2. 高效解析xml 3. 解析webxml 4. 反射webxml 5. ...
- Java NIO 学习笔记(三)----Selector
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- 可能是最全面的 Java G1学习笔记
转载自 可能是最全面的 Java G1学习笔记 引子 最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题.总体来讲,对于G1我有几个疑惑 ...
- 深入浅出 Java CMS 学习笔记
转载自 深入浅出 Java CMS 学习笔记 引子 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助. 1. ...
- Java NIO学习笔记之图解ByteBuffer
转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要 ...
- 转载:mongoDB java驱动学习笔记
http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...
最新文章
- 用python做一个图片验证码
- Postgres-XL的使用与动态增删数据节点
- 在google play开放平台上closed texting如何删除_“爷青回”!如何抢先体验《英雄联盟》手游?这份攻略送给你...
- python发钉钉消息_Python调用钉钉机器人推送消息
- 作者:寇纲(1975-),男,博士,西南财经大学工商管理学院教授、博士生导师、执行院长...
- Microsoft Enterprise Library 5.0 系列(十) Configuration Application Block
- 全球首个!腾讯优图开源3D医疗影像大数据预训练模型
- [CLS]预训练语言模型的前世今生[SEP]萌芽时代[SEP]
- 小米路由插件二维码2020_路由器如何禁止抖音、斗鱼、王者荣耀等app联网
- cubase计算机音乐,Cubase与Nuendo电脑音乐制作从新手到高手 (200例)
- 最优化进退法c语言编程,进退法、0.618法、Powell法、罚函数法的程序设计,急!!...
- 华沙理工大学语言c1,留学波兰华沙理工大学:一个让人轻易就爱上的地方
- 中国居民身份证号码验证
- 外贸独立站SEO技巧
- C语言项目(四)——基于Linux系统下的带有GUI界面的即时通信软件
- Balsamiq Mockups完全手册
- 怎么用VBA在excel中指定位置画图表? 如怎么用VBA在 A7:G13位置画出图标
- 美拍视频怎么下载?美拍视频解析下载和保存工具
- 论文学习:BP神经网络
- python3注释_python3的注释