Swing组件-顶层容器
通常将javax.swing包里的Swing组件归为三个层次:
顶层容器
中间层容器
原子组件
每个使用Swing组件的Java程序必须至少有一个顶层容器
,别的组件都必须放在这个顶层容器上才能显现出来,以下两个类便是顶层容器类。
1.JFrame类
JFrame实现单个主窗口;
独立存在,有边框、标题和菜单;
从原来的AWT组建的Frame类继承而来。
常用方法(5~8从Frame类中继承而来;9、10从Window类继承而来的常用方法):
-
JFrame(String title)
构造有标题的窗体,括号内为空时是无标题的窗体。
-
void setDefaultCloseOperation(int operation)
参数是整形的
静态常量
字段(选以下其一):
- HIDE_ON_CLOSE :隐藏窗口的默认窗口关闭操作
- DO_NOTHING_ON_CLOSE :无操作的默认窗口关闭操作
- DISPOSE_ON_CLOSE :移除窗口的默认窗口关闭操作
- EXIT_ON_CLOSE :退出|结束整个应用程序默认窗口关闭操作
-
void setIconImage(Image image)
显示在最小化图标中的图像。不是所有平台都支持最小化窗口的概念。 参数: image 是要显示的图标
图像的路径
。如果此参数为 null,则将图标图像设置为默认图像,默认图像可能随平台不同而不同。
-
void setJMenuBar(JMenuBar menubar)
JMenuBar负责创建菜单条,即JMenuBar的一个实例就是一个菜单条。
JMenuBar bar = new JMenuBar(); //创建菜单条
将菜单条添加到窗口中的方法就是setJMenuBar
-
void setTitle(String title)
设置标题,title是标题名
-
void setResizable(boolean resizable)
参数为boolean类型,resizeable值为
true
时,表示在生成的窗体可以自由改变大小;
resizeable值为false
时,表示生成的窗体大小是由程序员决定的,用户不可以自由改变该窗体的大小。
-
boolean isResizable()
返回:
如果可以调整此内部窗体的大小,则返回
true
;否则返回false
-
void setExtendedState(int state)
参数是Frame类定义的整形静态常量字段:
- NORMAL:正常状态
- ICONIFIED:将窗口图标化(最小化)
- MAXIMIZED_HORIZ: 水平方向最大化
- MAXIMIZED_VERT: 垂直方向最大化
- MAXIMIZED_BOTH:水平和垂直方向均最大化
-
void dispose()
撤销、关闭窗体
-
void pack()
重新调整窗口大小
2.JDialog类
实现一个二级窗口(对话框)
一般不单独使用,常
依附
别的容器(例如JFrame)。从原来的AWT组建的Dialog类继承而来。
JDialog对话框分为
模式(modal)
和非模式
两种 :▫模式对话框(
model为 true
)创建后,程序的其他窗口便不能进行操作,必须将该窗口关闭后,其他窗口才能进行操作。▫非模式对话框(
model为 false
)则无需这样,对话框与所属窗口可以互相切换,彼此在操作上没有顺序性。
常用构造方法:
JDialog dialog=new JDialog(JFrame owner,String title);
常用方法:
-
void setModalityType(JDialog.ModalityType.type)
设置对话框的模式类型 type:
- MODELESS: 无模式
- APPLICATION_MODAL: 应用程序模式(默认)
-
JDialog.ModalityType getModalityType()
返回模式类型
3.【实战举例】
使用JDialog对话框显示问候语,如下图:
代码如下:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
public class MyFrame01 extends JFrame{
private static final long serialVersionUID=1L;
private JLabel lab=new JLabel("请输入你的名字:");
private JTextField tf=new JTextField(10);
private JButton but=new JButton("确定");
private JPanel pan=new JPanel();//中间容器JPanel
private MyFrame01 thisFrame;//代表本窗口的字段
public MyFrame01() {//构造方法
thisFrame=this;//本窗体字段赋值
this.setTitle("自定义的JFrame窗体");
this.setBounds(600, 500, 300, 250);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
initialize();//调用初始化方法
this.setVisible(true);
}
public void initialize() {
pan.add(lab);//面板添加标签
pan.add(tf);
pan.add(but);
this.add(pan);//窗体添加面板
but.addActionListener(new ActionListener() {//按钮动作事件处理
public void actionPerformed(ActionEvent e) {
//构造并显示JDialog对话框
JDialog dialog=new JDialog(thisFrame,"JDialog对话框");
dialog.setModalityType(JDialog.ModalityType.APPLICATION_MODAL);
dialog.setBounds(650, 600, 200, 150);
dialog.add(new JLabel(tf.getText()+",您好!"));
dialog.setVisible(true);
}
});
}
}
public class EX01 {
public static void main(String[] args) {
new MyFrame01();//调用MyFrame01()
}
}
运行EX01.java程序即可显示上图。