JavaSwing | JFrame 框架与窗体

目录 | content

在这里插入图片描述

概述

JFrame 是一个可以独立显示的JavaSwing组件,在使用时需要引入javax.swing。它和Frame一样是一个顶级窗口,不能放在其他容器中。

窗体自身通常包含标题、图标、操作按钮(关闭、最小化、最大化),还可以为窗口添加菜单 栏、工具栏等。
JFrame作为Swing组件中的容器,其内也可以使用add方法添加很多控件

通俗点来理解,JFrame好比一个窗户的框子,边框可以自行修饰,内部可以嵌入几个设计好的玻璃窗。

java窗体和面板的继承树:
在这里插入图片描述

一、窗体的基本使用方法

1、创建一个派生自JFrame的类(比如MyFrame)
2、在MyFrame中设计用户界面
3、new一个MyFrame对象,调用setVisible方法即可显示

(也可以直接实例化一个JFrame类,第三大点有详细解读)

二、显示一个空白的窗体:

调用JFrame.setVisible方法显示窗体:

void setVisible(boolean b);

例:

import javax.swing.*;

public class SimpleFrame {
    public static void main(String[] args) {
        MyFrame frame = new MyFrame();  //new一个窗体对象
        frame.setVisible(true);  //显示窗体
    }
}

//自己写的窗体类,继承JFrame
class MyFrame extends JFrame {
    //构造函数,仅初始化窗体大小
    public MyFrame() {
        setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
    }

    public static final int DEFAULT_WIDTH = 300;
    public static final int DEFAULT_HEIGHT = 200;
}

可见窗体是一个对象,从JFrame类中派生出来的。

三、程序中创建并显示窗体的两种方法

1、在main方法直接实例化相关的UI控件并显示他们

直接将JFrame实例化:

JFrame();
JFrame(String title);  //title为标题

例:


import javax.swing.*;

public class JFrameTest1 {

    private static void constructGUI() {
        JFrame frame = new JFrame();  //直接new一个JFrame对象
        
        int frameWidth = 200;
        int frameHeight = 600;

        frame.setTitle("JFrame Test");  //设置窗体标题
        frame.setSize(frameWidth, frameHeight);  //设置窗体大小
        frame.setVisible(true);  //使窗体可见
    }

    public static void main(String[] args) {
//        constructGUI();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                constructGUI();
            }
        });
    }
}

可见,直接在主类中写了一个constructGUI方法,其中直接new了一个JFrame对象,并实例化相关的UI控件。然后在主函数中直接调用constructGUI方法,即可显示窗体

2、从JFrame派生出子类

就像我最开始显示是一个空白窗体一样:

import javax.swing.*;

class MyFrame extends JFrame {

    public MyFrame(String title) {

        int frameWidth = 700;
        int frameHeight = 500;

        setTitle(title); //设置窗口标题
        setSize(frameWidth, frameHeight);  //设置窗口大小
    }
}

public class JFrameTest2 {

    private static void constructGUI() {
        MyFrame frame = new MyFrame("Test");  //new一个MyFrame对象
        frame.setVisible(true);  //使窗口可见
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                constructGUI();
            }
        });
    }
}

看看代码整体的框架即可。先创建一个MyFrame类继承JFrame类,在类中设计窗体内容。然后再在其他类中写一个constructGUI方法创建MyFrame对象窗体并显示,之后直接调用constructGUI方法即可。

四、框架的部分方法实例

1、调整窗体的大小

调用JFrame.pack方法可以让窗体自动调用大小到刚好可以容纳其要显示的内容

MyFrame frame = new MyFrame();  //new一个窗体对象
frame.pack(); //让窗体自动调用大小到刚好可以容纳其要显示的内容
frame.setVisible(true);  //显示窗体

调用JFrame.setSize方法确定窗体大小:

void setSize(int width, int height)  //设置宽高
void setSize(Dimention d)

例:

//构造函数,仅初始化窗体大小
public MyFrame()
{
    setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
}

public static final int DEFAULT_WIDTH = 300;
public static final int DEFAULT_HEIGHT = 200;

或者

MyFrame frame = new MyFrame();  //new一个窗体对象
frame.setSize(100,200);
frame.setVisible(true);  //显示窗体

调用JFrame.setExtendedState方法可以最大化窗体

void setExtendedState(int M);

对于传入的参数M,Frame已经封装好了5个常量值,对应不同的最大化方式

常量值M 对应最大化方式
Frame.NORMAL 默认值
Frame.ICONFILED 最小化为图标
Frame.MAXIMIZED_HORIZ 水平最大化
Frame.MAXIMIZED_VETRT 垂直最大化
Frame.MAXIMIZED_BOTH 完全最大化

例:

MyFrame frame = new MyFrame();  //new一个窗体对象
frame.setExtendedState(Frame.MAXIMIZED_BOTH);  //窗体完全最大化
frame.setVisible(true);  //显示窗体

2、调整窗体的位置

调用JFrame.setLocation方法确定窗体位置:

void setLocation(int x, int y) //窗体左上角定位在在屏幕(x, y)处
void setLocation(Point p) //窗体左上角定位在在屏幕p点处

例:

MyFrame frame = new MyFrame();  //new一个窗体对象
frame.setLocation(200,400);
frame.setVisible(true);  //显示窗体

另:其实还可以把1、2一起设置了,同时设置窗口的位置和大小

void setBounds(int x, int y, int width, int height);
void setBounds(Rectangle rect);

3、自定义窗口的图标

调用JFrame.setIconImage方法确定窗体图标

void setIconImage(Image image);

4、自定义窗体的标题

调用JFrame.setTitle方法设置窗口标题

void setTitle(String title);  //在窗口的标题栏显示"title"

5、获取显示屏的大小

在开发时我们可能需要根据不同的显示屏有适当的显示。
AWT组件包中提供了一个Toolkit类,它封装了一些方法,通过这些方法我们可以访问“底层”平台图形支持系统的一些功能,比如:获取显示屏的大小。

调用Toolkit.getScreenSize方法获得显示屏的大小:

Dimension getScreenSize();  //获取屏幕分辨率

例:

MyFrame frame = new MyFrame();  //new一个窗体对象

Dimension d;
Toolkit kit = Toolkit.getDefaultToolkit();  //获取一个工具类对象
d = kit.getScreenSize();  //获取屏幕分辨率
int ScreenWidth = (int) d.width;
int ScreenHeight = (int) d.height;

frame.setLocation(ScreenWidth / 2, ScreenHeight / 2);
frame.setVisible(true);  //显示窗体

6、设置关闭窗体时的行为特性

或许你可以尝试一下,一般情况下关闭窗体不会使得程序结束。因为JFrame窗体在默认情况下设置关闭窗体只是隐藏了窗体而没有其他操作,所以程序仍然会运行。

JFrame所代表的窗体,当用户点击其“关闭“按键时,其行为特性是由其域内defaultCloseOperation决定的,JFrame默认其值为HIDE_ON_CLOSE(常量),行为效果即隐藏窗体:

private int defaultCloseOperation = HIDE_ON_CLOSE;

通过阅读源码发现,其实defaultCloseOperation一共有四种选值,分别对应不同的关闭窗体时的行为特性(在注释里解释了):

defaultCloseOperation的选值 关闭窗体时的行为特性
DO_NOTHING_ON_CLOSE(0) 关闭时无反应
HIDE_ON_CLOSE (1) 关闭时隐藏窗体,相当于 setVisible(flase)
DISOPOSE_ON_CLOSE (2) 关闭时隐藏并释放窗体,相当于dispose(),当最后一个窗体被释放后,程序结束运行
EXIT_ON_CLOSE (3) 直接关闭当前程序,相当于System.exit(0)

我们可以通过JFrame.setDefaultCloseOperation方法设置关闭窗体时的行为特性:

frame.setDefaultCloseOperation(frame.DO_NOTHING_ON_CLOSE); //关闭时隐藏窗体


end


欢迎关注个人公众号“鸡翅编程”,平常会把笔记汇总成推送更新~
在这里插入图片描述

发布了12 篇原创文章 · 获赞 5 · 访问量 214

猜你喜欢

转载自blog.csdn.net/weixin_43787043/article/details/103854029