收集自 http://topic.csdn.net/t/20060222/19/4571358.html
JFrame不具备模态窗口的条件
Window类的构造:
Window(GraphicsConfiguration gc){} //Frame和JFrame采用了这个构造方法
//下面这三个构造方法才能拓展出模态窗口,因为它们指定了一个Frame或Window作为其所有者
Window(Frame owner){}
Window(Window owner){}
Window(Window owner, GraphicsConfiguration gc){}
Dialog继承的是Window类,它的构造如下:
public Dialog(Frame owner, String title, boolean modal, GraphicsConfiguration gc) {
super(owner, gc); //重点在这里,所以它可以设置模态
this.title = title;
this.modal = modal;
setFocusTraversalPolicy(KeyboardFocusManager.getCurrentKeyboardFocusManager().getDefaultFocusTraversalPolicy());
}
JFrame和它的父类Frame的构造:
public Frame(String title, GraphicsConfiguration gc) {
super(gc); //采用了Window的第一种构造
init(title, gc);
}
我在表面层模拟了一个,挺有意思的,你玩玩
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Test {
private JFrame frame = null;
private JButton button = null;
private JCheckBox b = null;
public Test() {
frame = new JFrame("测试窗体");
JPanel pane = new JPanel();
b = new JCheckBox("模态窗口");
pane.add(b);
button = new JButton("弹出窗体");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
My_Frame my_f = new My_Frame(frame, b.isSelected(), String.valueOf(b.isSelected()));
my_f.setSize(120, 100);
my_f.setLocationRelativeTo(null);
my_f.setVisible(true);
}
});
frame.getContentPane().add(button);
frame.getContentPane().add(pane, BorderLayout.NORTH);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 200);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
public static void main(String[] args) {
new Test();
}
}
/************************* 下面是拓展的JFrame ***************************/
import javax.swing.*;
import java.awt.event.WindowListener;
import java.awt.event.WindowEvent;
public class My_Frame
extends JFrame implements WindowListener{
private JFrame frame = null;
private boolean modal = false;
private String title = null;
public My_Frame() {
this(null, false);
}
public My_Frame(JFrame frame){
this(frame, false);
}
public My_Frame(JFrame frame, boolean modal) {
this(frame, modal, "");
}
public My_Frame(JFrame frame, boolean modal, String title) {
super(title);
this.frame = frame;
this.modal = modal;
this.title = title;
this.init();
}
private void init(){
if(modal)
frame.setEnabled(false);
this.addWindowListener(this);
}
public void windowOpened(WindowEvent windowEvent) {}
public void windowClosing(WindowEvent windowEvent) {
if(modal)
frame.setEnabled(true);
}
public void windowClosed(WindowEvent windowEvent) {}
public void windowIconified(WindowEvent windowEvent) {}
public void windowDeiconified(WindowEvent windowEvent) {}
public void windowActivated(WindowEvent windowEvent) {}
public void windowDeactivated(WindowEvent windowEvent) {
if(modal)
this.requestFocus();
}
}
分享到:
相关推荐
在网页开发中,模态窗体(Modal Window)是一种常用的设计元素,用于向用户展示重要的信息、确认操作或收集输入数据。模态窗体的特点是它会暂停主页面的交互,直到用户与其交互并关闭为止。本文将详细介绍模态窗体的...
首先,Java中的“窗体”(Window)是用户界面的基础组件,它为应用程序提供了一个可视化的容器,用户可以在这个容器中与其他UI元素交互。Java Swing和JavaFX是两个常用的库,提供了创建窗体和各种GUI组件的功能。...
内部窗体通常被用作主窗体的一部分,提供额外的功能或者信息,而不像模态或非模态对话框那样独立于主应用程序窗口。本篇文章将详细介绍如何在Swing中实现内部窗体,以及它们在主父窗体中的使用。 首先,让我们了解...
模态对话框会阻止用户与父窗体或其他子窗体进行交互,直到该对话框被关闭。 4. **禁用或隐藏打开按钮**:当子窗体已经打开时,可以禁用或隐藏主窗体上的“打开”按钮,防止用户再次点击。 5. **事件处理**:为打开...
首先,jQuery的弹出窗体特效通常涉及到创建一个可浮动的对话框或模态窗口,这些窗口可以用于显示信息、确认用户操作或提供额外的交互界面。这种效果可以通过使用`.show()`, `.hide()`, `.fadeIn()`, `.fadeOut()`等...
它允许网页在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容,从而提供了更好的用户体验。在这个特定的场景中,"一个基于ajax技术实现的模式窗体对话框文件上传控件" 是一种交互式的UI组件,它结合...
此外,还有`ShowDialog`(模态对话框)和`Dispose`(释放资源)等方法,用于控制窗体的生命周期。 6. 窗体状态管理 窗体的状态包括最小化、最大化和恢复。开发者可以通过设置窗体的最小化和最大化按钮,以及响应...
此外,窗体间的通信也是常见的需求,例如通过打开新的窗体来展示详细信息,或使用模态对话框来获取用户输入。 在窗体设计中,还有几个重要的概念,如窗体状态(如是否可见、是否激活)、窗体的Z顺序(决定哪个窗体...
嵌套窗体可以作为模态或非模态,根据需要决定是否阻止用户与父窗体的交互。在编程中,可以通过创建新的Form实例并设置其Parent属性为父窗体来实现嵌套。 最后,拖动功能是所有窗口应用的基础,允许用户通过鼠标移动...
"窗体关闭及回调"是指在窗体(如模态对话框)被关闭时,能够执行一段代码,即回调函数。这对于清理资源、保存数据或者验证用户操作非常有用。例如,一个确认对话框可能会在用户点击"确定"按钮后关闭,并触发一个回调...
- **JDialog窗体**:常用于创建模态对话框,即用户必须先关闭该对话框才能继续与主窗口交互。 - 创建实例: ```java JDialog dialog = new JDialog(parentFrame, "对话框标题", true); ``` - 获取容器: ```...
AWT是Java的基础GUI组件库,包括按钮、文本框、窗体等基本元素,而Swing是建立在AWT之上的高级组件库,提供了更多美观、功能丰富的组件,并支持模态对话框、布局管理器等特性。在这个坦克大战游戏中,开发者可能使用...
本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...
"Java应用程序习题第10章" 本文总结了Java应用程序的第10章习题,涵盖了Java图形用户界面(GUI)编程的相关知识点。...为能够得到正确结果,请在当前目录下建立数据库student.mdb。程序运行效果如图5所示。
Swing的模态对话框如`JOptionPane`可能被用来显示警告或确认信息。此外,`JTable`或`JList`可能被用来展示客房信息、客户预订记录等数据。 项目可能还包括对数据库操作的支持,比如使用Java的`JDBC`(Java Database...
在WinForms中,要以模态窗口的方式打开窗体,可以使用`ShowDialog()`方法。例如: ```csharp FrmManage frmManage = new FrmManage(); frmManage.ShowDialog(); ``` ### 12. Java中的循环控制 题目中的Java代码:...
7. **使用对话框结果**:如果目标Form是模态对话框(`ShowDialog()`方法打开),可以直接在关闭对话框后通过返回值获取数据。 理解并掌握这些方法有助于在设计Windows应用程序时灵活地处理Form间的数据交换。需要...