这个组件可以让用户看到界面里的显示但是无法操作.
需要的图: loading.gif
代码(main() 方法里是demo代码):
运行效果截图:
import javax.swing.*;
import java.awt.BorderLayout;
import java.awt.Cursor;
import java.awt.FlowLayout;
import java.awt.event.*;
/**
* We have to provide our own glass pane so that it can paint a loading
* dialog and then the user can see the progress but can't operation
* the GUI, it's a transparent pane so the below contents is visible.
*
* Also please refer to articles by Sun - How to Use Root Panes:
* {@link http://java.sun.com/docs/books/tutorial/uiswing/components/rootpane.html}
* @author Jacky Liu
* @version 1.0 2006-08
*/
public class LoadingGlassPane extends JPanel {
private static final long serialVersionUID = 1L;
/**
* A label displays status text and loading icon.
*/
private JLabel statusLabel = new JLabel("Reading data, please wait...");
public LoadingGlassPane() {
try {
statusLabel.setIcon(new ImageIcon(getClass().getResource(
"loading.gif")));
} catch (RuntimeException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
statusLabel.setHorizontalAlignment(JLabel.CENTER);
// Must add a mouse listener, otherwise the event will not be
// captured
this.addMouseListener(new java.awt.event.MouseAdapter() {
public void mousePressed(MouseEvent e) {
}
});
this.setLayout(new BorderLayout());
this.add(statusLabel);
// Transparent
setOpaque(false);
}
/**
* Set the text to be displayed on the glass pane.
*
* @param text
*/
public void setStatusText(final String text) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
statusLabel.setText(text);
}
});
}
/**
* Install this to the jframe as glass pane.
* @param frame
*/
public void installAsGlassPane(JFrame frame) {
frame.setGlassPane(this);
}
/**
* A small demo code of how to use this glasspane.
* @param args
*/
public static void main(String[] args) {
JFrame frame = new JFrame("Test GlassPane");
final LoadingGlassPane glassPane = new LoadingGlassPane();
glassPane.installAsGlassPane(frame);
JButton button = new JButton("Test Query");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// Call in new thread to allow the UI to update
Thread th = new Thread() {
public void run() {
glassPane.setVisible(true);
glassPane.setCursor(new Cursor(Cursor.WAIT_CURSOR));
// TODO Long time operation here
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
glassPane.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
glassPane.setVisible(false);
}
};
th.start();
}
});
frame.getContentPane().setLayout(new FlowLayout());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(button);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
分享到:
相关推荐
在Java的Swing库中,鼠标事件(Mouse Events)是用户与GUI组件交互的重要部分,而loading效果则通常指的是在处理耗时操作时显示的一种视觉指示,以告知用户程序正在运行且尚未完成。本篇文章将深入探讨如何在Swing...
总之,Java Swing的GlassPane是一个强大的工具,可以用于创建各种复杂的视觉效果,包括模糊弹出Panel。通过熟练掌握这些技巧,开发者可以为用户提供更加引人入胜和互动性更强的Java桌面应用程序体验。
在Swing中,我们可以通过JRootPane的setGlassPane方法来设置一个透明的Glass Pane,然后在Glass Pane上实现透明度控制。例如: ```java JRootPane rootPane = frame.getRootPane(); rootPane.setGlassPane(new ...
1. **Swing基础**:Swing是Java提供的一个图形用户界面(GUI)工具包,它是Java Foundation Classes (JFC)的一部分。它提供了丰富的组件库,如按钮、文本框、滚动面板等,以及用于构建复杂布局的容器。 2. **组件和...
`JRootPane`本身不是一个真正的容器,而是由`GlassPane`和`LayeredPane`组成,其中`LayeredPane`包含`ContentPane`和`MenuBar`。用户不能直接向`JRootPane`添加组件,而是应该通过`ContentPane`或`LayeredPane`添加...
首先,我们需要获取默认的 Toolkit 对象,然后使用 createImage 方法创建一个 Image 对象,最后使用 setIconImage 方法将该图标设置为窗体的图标。 Toolkit tk = Toolkit.getDefaultToolkit(); Image image = tk....
在这个“java拖拽透明组件源码”中,我们主要关注的是如何在Swing环境中创建一个可拖动的透明组件。 拖拽功能在Java中可以通过实现`TransferHandler`类和使用`MouseListener`与`MouseMotionListener`接口来完成。`...
本章节将探讨Java Swing中的`JDesktopPane`和`JInternalFrame`组件及其使用方式,以及它们如何构建出一个功能强大的多文档界面(MDI)。通过本章节的学习,您将了解这些组件的基本特性、如何利用它们来实现桌面应用...
**JTable** 是一个用于显示和编辑表格数据的组件。在`components-TableFTFEditDemoProject.zip`中,你可以看到如何创建和操作JTable,包括设置列头、添加数据、以及实现过滤功能。JTable允许用户交互,例如排序、...
在Java Swing中,GlassPane是一个特殊类型的容器,位于所有其他组件之上,可以用来全局捕获鼠标和键盘事件,或者作为透明覆盖层显示加载指示器或临时遮罩。 总的来说,理解组件模型和双事件处理线程对于构建高性能...
contentPane是透明的,但默认情况下,它不是一个可直接操作的组件,而是作为其他组件的容器,比如按钮、文本框等。 **glassPane** 是最顶层的面板,它位于所有其他组件之上,通常用于捕捉鼠标事件或在其他组件上...
- **概念**:`GlassPane`是Swing中一个特殊类型的组件,它可以被设置为任何`JFrame`或`JDialog`的顶层组件。通常情况下,它是透明的,并且位于所有其他组件之上。 - **用途**:利用`GlassPane`可以实现全局的遮罩层...
Java图像编程是Java编程语言中的一个重要领域,它允许开发者创建丰富的图形用户界面(GUI)和处理图像数据。这个“Java图像编程实例库”显然是一份集合了多种Java图像编程示例的资源,可以帮助学习者更好地理解和...
CodenameOne使用一个特殊的GlassPane类来处理绘图,该类可以覆盖在屏幕上,用于绘制自定义图形。 总结来说,CodenameOne开发者指南提供了全面的知识,涵盖了从安装、基础概念、组件使用、动画实现到商业化选项的...
通过使用`GlassPane`面板并结合`AlphaComposite`的透明度设置,可以实现在主界面背景下显示一个半透明的登录界面。具体步骤包括创建登录面板实例、将其设置为`GlassPane`面板、调整透明度以及重写`paintComponent()`...
实现登录界面的关键技术,使用了GlassPane面板,它位于窗体的最顶层,Swing默认该面板为隐藏模式。本模块继承JPanel类编写了登录面板,其中包含登录信息的文本框和“登录”按钮等信息,然后调用JFrame窗体的...