JavaSwing | JFrame 框架与窗体

  • Post author:
  • Post category:java




目录 | 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



欢迎关注个人公众号“鸡翅编程”,平常会把笔记汇总成推送更新

~

在这里插入图片描述



版权声明:本文为weixin_43787043原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。