一、JDialog窗体
JDialog窗体常用功能是从一个窗体中弹出另一个窗体。
二、重点内容
1.super(超级)
主要用于打开了子窗体时,阻塞对父窗体的修改。也就是说打开了窗体便不能对父窗体有任何动作,关闭子窗体才可以对父窗体开始操作。
super(A,B,C);
A-----父窗体对象
B-----对话框标题
C-----是否阻塞父窗体
2.按钮Btton
JButton btn=new JButton("弹出对话框");
表示创建按钮,然后按钮标签为“弹出对话框”。
c.setLayout(new FlowLayout());
设置布局,使用流布局。不使用流布局(也就是当没有使用这句代码时),按钮会占满整个窗体,而不是像下面的淡蓝色长方形了。
三、源码
import java.awt.Container;// 容器
import java.awt.FlowLayout;// 布局
import java.awt.event.ActionEvent;// 动作事件
import java.awt.event.ActionListener; // 动作监听
import javax.swing.*;// JDialog窗体是Swing组件中的对话框
class Demo extends JDialog{ // Demo继承JDialog类
public Demo(JFrame frame){
/*
* 第一个参数:父窗体对象
* 第二个参数:对话框标题
* 第三个参数:是否阻塞父窗体
*/
super(frame,"对话框标题",true);
Container c=getContentPane();// 获取窗体容器,Container(容器),content(内容),pane(窗格)
c.add(new JLabel("这是一个对话框"));// 设置一个标签,label(标签)
//1 setVisible(true);// 设置窗体可见,visible(可见物),放这最后对话框缩起来
setBounds(400,300,100,100);// 设置窗体坐标,x、y、长、宽,bounds(界限)
}
public static void main(String[] args){
JFrame f=new JFrame("父窗体");
f.setBounds(300,200,300,300);
Container c=f.getContentPane();
JButton btn=new JButton("弹出对话框");
c.setLayout(new FlowLayout());//设置布局,使用流布局
c.add(btn);// 容器c里添加按钮
f.setVisible(true);// 窗体是否可见
f.setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭规则
//添加动作监听
btn.addActionListener(new ActionListener(){ // Action(行动)
public void actionPerformed(ActionEvent e){// performed(执行),event(事件)
//1 new Demo(f);// 传入f
// 设置Demo类d,对d进行操作指令
Demo d=new Demo(f);
d.setVisible(true);// 设置窗体可视化
}
});
}
}
四、源码运行效果
- 源码刚开始运行时,没有任何动作
- 点击按钮后
五、补充说明
btn.addActionListener(new ActionListener(){ // Action(行动)
public void actionPerformed(ActionEvent e){// performed(执行),event(事件)
//1 new Demo(f);// 传入f
// 设置Demo类d,对d进行操作指令
Demo d=new Demo(f);
d.setVisible(true);// 设置窗体可视化
}
});
一开始在上面这段点击“按钮”的代码时,javac后会出现“找不到符号”的错误,并且代码没有问题。这时程序前用的是import java.awt.*
。
我解决的方法是取消import java.awt.*
并把用到的awt类全打进去,如下:
import java.awt.Container;// 容器
import java.awt.FlowLayout;// 布局
import java.awt.event.ActionEvent;// 动作事件
import java.awt.event.ActionListener; // 动作监听
六、与小恐龙挑战的关系
小恐龙挑战中用到了swing,程序窗口的使用,而我这一块的知识不稳固,最近一段时间会专门学习swing的一些基本用法。学完这一部分,再根据挑战的内容,选择其他还未懂的内容进行学习。
六、定位日期
2020.7.15;22:50