Swing中用GlassPane显示一个透明的正在操作框

这个组件可以让用户看到界面里的显示但是无法操作.

需要的图 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.ht ml}* @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 blocke1.printStackTrace();} statusLabel.setHorizontalAlignment(JLabel.CENTER);// Must add a mouse listener, otherwise the event will not be// capturedthis.addMouseListener(new java.awt.event.MouseAdapter() {public void mousePressed(MouseEvent e) {} });this.setLayout(new BorderLayout());this.add (statusLabel);// TransparentsetOpaque(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 updateThread th = new Thread() {public void run() {glassPane.setVisible (true);glassPane.setCursor(new Cursor(Cursor.WAIT_CURSOR));// TODO Long time operation heretry {Thread.sleep(2000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.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);} }

带着我的相机和电脑,远离繁华,走向空旷。

Swing中用GlassPane显示一个透明的正在操作框

相关文章:

你感兴趣的文章:

标签云: