目录 | 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
欢迎关注个人公众号“鸡翅编程”,平常会把笔记汇总成推送更新
~