📄 glassexample.java
字号:
// GlassExample.java// Show how a glass pane can be used to block mouse (and key!) events.// Updated in response to discussions with Mark Hansen at Unify.//package jswing.ch08;import javax.swing.*;import java.awt.*;import java.awt.event.*;public class GlassExample extends JFrame { // We'll use a custom glass pane rather than a generic JPanel. FixedGlassPane glass; JProgressBar waiter = new JProgressBar(0, 100); Timer timer; public GlassExample() { super("GlassPane Demo"); setSize(500, 300); setDefaultCloseOperation(EXIT_ON_CLOSE); // Now set up a few buttons & images for the main application JPanel mainPane = new JPanel(); mainPane.setBackground(Color.white); JButton redB = new JButton("Red"); JButton blueB = new JButton("Blue"); JButton greenB = new JButton("Green"); mainPane.add(redB); mainPane.add(greenB); mainPane.add(blueB); mainPane.add(new JLabel(new ImageIcon("oreilly.gif"))); // Attach the popup debugger to the main app buttons so you // see the effect of making a glass pane visible PopupDebugger pd = new PopupDebugger(this); redB.addActionListener(pd); greenB.addActionListener(pd); blueB.addActionListener(pd); // And last but not least, our button to launch the glass pane JButton startB = new JButton("Start the big operation!"); startB.addActionListener(new ActionListener() { public void actionPerformed(java.awt.event.ActionEvent A) { // manually control the 1.2/1.3 bug work-around glass.setNeedToRedispatch(false); glass.setVisible(true); startTimer(); } }); Container contentPane = getContentPane(); contentPane.add(mainPane, BorderLayout.CENTER); contentPane.add(startB, BorderLayout.SOUTH); // Set up the glass pane with a little message and a progress bar... JPanel controlPane = new JPanel(new GridLayout(2,1)); controlPane.setOpaque(false); controlPane.add(new JLabel("Please wait...")); controlPane.add(waiter); glass = new FixedGlassPane(getJMenuBar(), getContentPane()); glass.setLayout(new GridLayout(0,1)); glass.setOpaque(false); glass.add(new JLabel()); // padding... glass.add(new JLabel()); glass.add(controlPane); glass.add(new JLabel()); glass.add(new JLabel()); setGlassPane(glass); } // A quick method to start up a 10 second timer and update the // progress bar public void startTimer() { if (timer == null) { timer = new Timer(1000, new ActionListener() { int progress = 0; public void actionPerformed(ActionEvent A) { progress += 10; waiter.setValue(progress); // Once we hit 100%, remove the glass pane and reset the // progress bar stuff if (progress >= 100) { progress = 0; timer.stop(); glass.setVisible(false); // Again, manually control our 1.2/1.3 bug workaround glass.setNeedToRedispatch(true); waiter.setValue(0); } } }); } if (timer.isRunning()) { timer.stop(); } timer.start(); } // A graphical debugger that pops up anytime a button is pressed public class PopupDebugger implements ActionListener { private JFrame parent; public PopupDebugger(JFrame f) { parent = f; } public void actionPerformed(ActionEvent ae) { JOptionPane.showMessageDialog(parent, ae.getActionCommand()); } } public static void main(String[] args) { GlassExample ge = new GlassExample(); ge.setVisible(true); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -