JFrame
JFrame(窗口)是独立的存在的顶级容器,不能放置在其他容器之中。
功能:最小化,设定窗口大小等
创建JFrame对象
import javax.swing.JFrame;
public class Demo1 {
public static void main(String[] args) {
JFrame jf = new JFrame();
}
程序运行没有报错,但是没有窗口弹出,为什么呢?
显示窗口
import javax.swing.JFrame;
public class Demo1 {
public static void main(String[] args) {
JFrame jf = new JFrame();
//设置窗体可见
jf.setVisible(true);
}
给窗口title命名
- 方法一
import javax.swing.JFrame;
public class Demo1 {
public static void main(String[] args) {
JFrame jf = new JFrame();
jf.setTitle("这是我的第一个窗体!");
//设置窗体可见
jf.setVisible(true);
}
- 方法二(推荐)
import javax.swing.JFrame;
public class Demo1 {
public static void main(String[] args) {
JFrame jf = new JFrame("这是我的第一个窗体!");
//设置窗体可见
jf.setVisible(true);
}
当关闭窗口的时候,我们发现程序并没有结束退出,怎么做呢?
窗口关闭,代码结束
import javax.swing.JFrame;
public class Demo1 {
public static void main(String[] args) {
JFrame jf = new JFrame("这是我的第一个窗体!");
//设置关闭窗口时,一同结束掉后台的Java程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗体可见
jf.setVisible(true);
}
每次运行窗口都很小,每次都要把它拉大太麻烦了,现在我们来设置窗口大小。
设置窗口大小
调用setSize(width, height)方法,注意width,height值均为像素
import javax.swing.JFrame;
public class Demo1 {
public static void main(String[] args) {
JFrame jf = new JFrame("这是我的第一个窗体!");
//设置关闭窗口时,一同结束掉后台的Java程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//设置窗口大小 -->像素
jf.setSize(300, 400);
//设置窗体可见
jf.setVisible(true);
}
窗口的基本内容就讲完了,但是这样写在多线程中是不安全的。
改进
- 方法提取
- 使用菜单命令
- Ctrl + 1
- Alt + Shift + M(推荐)
import javax.swing.JFrame;
public class Demo1 {
public static void main(String[] args) {
method();
}
private static void method() {
JFrame jf = new JFrame("这是我的第一个窗体!");
// 设置关闭窗口时,一同结束掉后台的Java程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口大小 -->像素
jf.setSize(300, 400);
// 设置窗体可见
jf.setVisible(true);
}
}
- 使用工具类
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo1 {
public static void main(String[] args) {
//使用SwingUtilities工具类,invokeLater(doRun)方法,new 一个Runnable()接口
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
method();
}
});
}
private static void method() {
JFrame jf = new JFrame("这是我的第一个窗体!");
// 设置关闭窗口时,一同结束掉后台的Java程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口大小 -->像素
jf.setSize(300, 400);
// 设置窗体可见
jf.setVisible(true);
}
}
优势:拥有2条线程,一条主线程,和一条自己通Runnable开辟的线程。
为什么? 主线程不能更新UI
一个接口Runnable(),一个方法run()这是函数式接口,函数式接口可以简化
- 代码简化
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
public class Demo1 {
public static void main(String[] args) {
//选中new Runnable()使用快捷键 Ctrl + 1
SwingUtilities.invokeLater(() -> method());
}
private static void method() {
JFrame jf = new JFrame("这是我的第一个窗体!");
// 设置关闭窗口时,一同结束掉后台的Java程序
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口大小 -->像素
jf.setSize(300, 400);
// 设置窗体可见
jf.setVisible(true);
}
}
总结
- 创建对象
- 指定title名称
- 设置关闭效果
- 指定宽高大小
- 设置窗口可见