说实话,要不要跳过 Java 图形页面这个问题我纠结了很久。

工作多年,已经把 Java GUI swing 忘的一干二净,不会有公司用它的,办公场景完全用不到 swing

但是,我们可以完全可以考虑拿它做一些小工具,比如软件开启集成页,省的每次在系统里,都要在固定地方打开软件。再比如桌面闹钟,计时器,json 格式化工具,时间戳转换工具。它原生、轻量级,只要有 java 环境就能用,还能用 exe4j 打包,那就可以直接生成 exe 文件,随时可用。

考虑到这点,打算再学习一遍。

7.1 swing

Java最初做窗口时,弄了个 AWT(Abstract Window Toolkit),理论上可以运行在各个平台,单实际使用有很多 bug 和缺陷。

Java1.2 开始产生 swing.但是Swing是基于 AWT,没有完全替代 AWT.

选择 swing 的原因?

  1. 界面元素丰富
  2. bug
  3. swing 有不同平台一致的感觉

7.2 创建窗口

步骤:

  1. 设置大小
  2. 设置关闭函数
  3. 显示
import javax.swing.*;

public class Main {
public static void main(String[] args){
Main solution = new Main();
MyFrame myFrame = solution.new MyFrame();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
myFrame.setVisible(true);
}

class MyFrame extends JFrame {
public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;
public MyFrame(){
setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
}
}
}

效果,窗口出现在左上角:

《Java 核心技术 卷1》 笔记 第七章 图形程序设计_内部类

假设直接用JFrame,不用它呢?

import javax.swing.*;

public class Main {
public static void main(String[] args){
Main solution = new Main();
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setSize(300,200);
f.setVisible(true);
}
}

《Java 核心技术 卷1》 笔记 第七章 图形程序设计_开发语言_02

结论:很多默认配置参数时,可以采用继承方式,定义默认配置,如果窗体非常简单,可以无需自定义窗体。

7.3 框架定位

setTiltle:标题

setIconImage:左上角图标

setLocation: 定位

setBounds:前两个定位,后两个长宽

setResizable:是否能放大还原

import javax.swing.*;
import java.awt.*;

public class Main {
public static void main(String[] args){
Main solution = new Main();
MyFrame myFrame = solution.new MyFrame();
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

// Image icon = Toolkit.getDefaultToolkit().getImage("D:\\program\\test\\testJ8\\src\\resource\\background.jpeg");
Image icon = Toolkit.getDefaultToolkit().getImage("src\\resource\\background.jpeg");
myFrame.setIconImage(icon);
myFrame.setVisible(true);
}

class MyFrame extends JFrame {
public MyFrame(){
// setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
//setLocation(new Point(500,500));
//前两个是绘制位置,相当于setLocatino;后两个是绘制大小,相当于setSize
setBounds(new Rectangle(500,500,300,200));

//标题
setTitle("hello");
//是否能使用 放大/还原 窗体
setResizable(false);
}
}
}

《Java 核心技术 卷1》 笔记 第七章 图形程序设计_开发语言_03

IDEA下 CTRL+SHIFT+ALT+U 查看继承关系,把鼠标光标放在JFrame上查看:

《Java 核心技术 卷1》 笔记 第七章 图形程序设计_java_04

《Java 核心技术 卷1》 笔记 第七章 图形程序设计_内部类_05

  系列内容

《Java 核心技术 卷1》 笔记:第一章 Java程序设计概述

《Java 核心技术 卷1》 笔记:第二章 Java程序设计环境

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(1)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(2)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(3)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(4)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(5)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(6)

《Java 核心技术 卷1》 笔记:第三章 Java基本的程序设计结构(7)大数处理、数组、多维数组、控制台传参

《Java 核心技术 卷1》 笔记 第四章:类与对象

《Java 核心技术 卷1》 笔记 第四章:类与对象(2) GregorianCalendar 与 类的基本组成

《Java 核心技术 卷1》 笔记 第四章:类与对象(3) 构造器全局私有方法

《Java 核心技术 卷1》 笔记 第四章:类与对象(4) 静态字段+静态方法+工厂方法

《Java 核心技术 卷1》 笔记 第四章:类与对象(5) 形参与实参 构造器的默认值与默认构造

《Java 核心技术 卷1》 笔记 第四章:类与对象(6) 构造器调用与初始化块

《Java 核心技术 卷1》 笔记 第四章:类与对象(7) 注释、JavaDoc与类设计

《Java 核心技术 卷1》 笔记 第五章 继承

《Java 核心技术 卷1》 笔记 第五章 继承(2)

《Java 核心技术 卷1》 笔记 第五章 继承(3)

《Java 核心技术 卷1》 笔记 第五章 继承(4)equals方法

《Java 核心技术 卷1》 笔记 第五章 继承(5)hashCode 与 toString

《Java 核心技术 卷1》 笔记 第五章 继承(6) 泛型

《Java 核心技术 卷1》 笔记 第五章 继承(7) 包装类和可变数组

《Java 核心技术 卷1》 笔记 第五章 继承(8) 枚举类与类反射

《Java 核心技术 卷1》 笔记 第五章 继承(9) 异常捕获与反射运用

《Java 核心技术 卷1》 笔记 第五章 继承(10)反射

《Java 核心技术 卷1》 笔记 第五章 继承(11)反射泛型数组+方法指针+类设计技巧

《Java 核心技术 卷1》 笔记 第六章 接口和内部类

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(2)

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(3) 接口回调与内部类

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(4) 局部内部类和局部内部类引用方法变量分析

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(5) 匿名内部类和静态内部类

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(6) 静态代理

《Java 核心技术 卷1》 笔记 第六章 接口和内部类(7) 动态代理

喜欢的话,点个赞吧~!平时做题,以及笔记内容将更新到公众号。

关注公众号,互相学习:钰娘娘知识汇总

《Java 核心技术 卷1》 笔记 第七章 图形程序设计_java_06