自用的,不是闲着无聊的建议不要看,不专业不认真不是分享态度,纯属自用。

看的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 学习笔记自用相关推荐

  1. Java零基础笔记自用版(一)

    系列文章目录 一.Java零基础笔记自用版(一) 目录 系列文章目录 前言 一.⭐️Java概述 二.⭐️变量 三.⭐️运算符 四.⭐️控制结构 五.⭐️数组.排序.查找 写在最后 前言 最近在学习J ...

  2. 尚学堂JAVA基础学习笔记_2/2

    尚学堂JAVA基础学习笔记_2/2 文章目录 尚学堂JAVA基础学习笔记_2/2 写在前面 第10章 IO技术 1. IO入门 2. IO的API 3. 装饰流 4. IO实战 5. CommonsI ...

  3. Swing学习笔记目录

    本篇文章总结一下全部的Swing笔记,算得上是一个大纲了吧. 本篇笔记目录全部摘抄自网上系列教程,由本人整合而来,也算是记录一下自己的学习经历.要转载的请注明出处,谢谢. Swing学习笔记 1. S ...

  4. 尚学堂JAVA高级学习笔记_1/2

    尚学堂JAVA高级学习笔记 文章目录 尚学堂JAVA高级学习笔记 写在前面 第1章 手写webserver 1. 灵魂反射 2. 高效解析xml 3. 解析webxml 4. 反射webxml 5. ...

  5. Java NIO 学习笔记(三)----Selector

    目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...

  6. 可能是最全面的 Java G1学习笔记

    转载自 可能是最全面的 Java G1学习笔记 引子 最近遇到很多朋友过来咨询G1调优的问题,我自己去年有专门学过一次G1,但是当时只是看了个皮毛,因此自己也有不少问题.总体来讲,对于G1我有几个疑惑 ...

  7. 深入浅出 Java CMS 学习笔记

    转载自  深入浅出 Java CMS 学习笔记 引子 带着问题去学习一个东西,才会有目标感,我先把一直以来自己对CMS的一些疑惑罗列了下,希望这篇学习笔记能解决掉这些疑惑,希望也能对你有所帮助. 1. ...

  8. Java NIO学习笔记之图解ByteBuffer

    转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰. <程序员的思维修炼>一本书讲过,主动学习,要 ...

  9. 转载:mongoDB java驱动学习笔记

    http://www.blogjava.net/watchzerg/archive/2012/09/22/388346.html mongoDB java驱动学习笔记 指定新mongo实例: Mong ...

最新文章

  1. 用python做一个图片验证码
  2. Postgres-XL的使用与动态增删数据节点
  3. 在google play开放平台上closed texting如何删除_“爷青回”!如何抢先体验《英雄联盟》手游?这份攻略送给你...
  4. python发钉钉消息_Python调用钉钉机器人推送消息
  5. 作者:寇纲(1975-),男,博士,西南财经大学工商管理学院教授、博士生导师、执行院长...
  6. Microsoft Enterprise Library 5.0 系列(十) Configuration Application Block
  7. 全球首个!腾讯优图开源3D医疗影像大数据预训练模型
  8. [CLS]预训练语言模型的前世今生[SEP]萌芽时代[SEP]
  9. 小米路由插件二维码2020_路由器如何禁止抖音、斗鱼、王者荣耀等app联网
  10. cubase计算机音乐,Cubase与Nuendo电脑音乐制作从新手到高手 (200例)
  11. 最优化进退法c语言编程,进退法、0.618法、Powell法、罚函数法的程序设计,急!!...
  12. 华沙理工大学语言c1,留学波兰华沙理工大学:一个让人轻易就爱上的地方
  13. 中国居民身份证号码验证
  14. 外贸独立站SEO技巧
  15. C语言项目(四)——基于Linux系统下的带有GUI界面的即时通信软件
  16. Balsamiq Mockups完全手册
  17. 怎么用VBA在excel中指定位置画图表? 如怎么用VBA在 A7:G13位置画出图标
  18. 美拍视频怎么下载?美拍视频解析下载和保存工具
  19. 论文学习:BP神经网络
  20. python3注释_python3的注释

热门文章

  1. 清除谷歌浏览器记住的密码
  2. [毕业论文]Word版论文的常见格式问题整理(持续更新)
  3. Airtest图像识别原理
  4. pyside2登录页面与主页面
  5. Matlab 李萨如图模拟_动态模拟李萨如图形形成过程保存为.GIF动图
  6. 计算机网络演讲稿,网络文明演讲稿范文
  7. 聚乳酸包覆油酸修饰二氧化硅纳米颗粒/聚乙二醇 PEG-PLGA-SiO2的应用
  8. Java使用OpenCV和Tesseract-OCR实现银行卡图片处理与卡号识别
  9. 如何才能提高自己的沟通能力
  10. IDL实现风云三号D星1km数据定标及几何校正