我用swing做的一个JFrame,用什么方法可以设置鼠标的状态(忙\正常)?
用setCursor(Cursor.WAIT_CURSOR)只是设置了鼠标样式,要如何做才能让鼠标真正忙呢,就像windows那样?

解决方案 »

  1.   

    我的意思是设置样式后,如漏斗形鼠标还是可以点击JFrame上面的按钮阿~
    怎样做才能真正置忙?也就是在JFrame区域内都不能起作用。
    谢谢
      

  2.   

    你说的不是鼠标忙,而是设置按钮或其它组件暂时禁用
    button.setEnabled(false);
    等鼠标指针忙完了再设置回来
    button.setEnabled(true);
      

  3.   

    我的意思是这样,我用setCursor(Cursor.WAIT_CURSOR)设置鼠标后发现只能让鼠标的样子变成漏斗状,但是那个漏斗鼠标还是可以在界面上点击任何控件。
    我想要的效果是真正的鼠标置忙。比如有些软件在鼠标忙状态时是不能进行任何操作的。
    谢谢大人关注,此帖一定散分,言而有幸
      

  4.   

    两位好像还没有搞懂我的意思。
    举个例子吧:比如界面上有"打印""暂停""退出"等几个按钮,用户点击"打印"时,打印机开始工作,此时用户点击"暂停",但是打印机的反应比较慢,所以这时候我想设置鼠标忙,也就是不能点击界面上任何按钮,直到暂停结束,恢复鼠标功能,可以进行其它操作.
    如果单纯的设置button.enable(false),按钮状态会改变为灰化,这是没有必要的。只是要控制鼠标忙得时候不能在界面上作操作而已。
      

  5.   

    在你的容器上使用setGlassPane(glass);加一块玻璃窗格。glass可以使一个透明的JPanel,这个glass也做为鼠标监听器监听所有鼠标事件.你把鼠标状态设置成漏斗形状后,调用glass.setVisible(true);将glass显示在最上层,使glass下的各件不响应鼠标的事件即可。详细可参阅《Java Swing》第二版,第八章 Swing 容器,P259
      

  6.   

    package falcon.test;import java.awt.event.*;
    import javax.swing.*;import java.awt.*;
    import java.util.*;public class MyFrame extends JFrame implements ActionListener { public MyFrame() {
    init();
    } private JButton testButton; private void init() {
    this.setLayout(new BorderLayout()); testButton = new JButton("Test Mouse Click");
    testButton.addActionListener(this);
    this.add(testButton, BorderLayout.NORTH); JButton another = new JButton("another");
    another.addActionListener(this);
    this.add(another, BorderLayout.SOUTH);

    this.getGlassPane().addMouseListener( new MouseAdapter() {});
    this.getGlassPane().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
    // this statement will mask any mouse event for all controls on this frame
    this.getGlassPane().setVisible(true);
    } public void actionPerformed(ActionEvent ae) {
    if (ae.getSource() == testButton) {
    JOptionPane.showMessageDialog(this, "OH, I've been clicked!!");
    }
    }

    public static void main(String[] args){
    JFrame frame = new MyFrame();

    frame.setPreferredSize(new Dimension(500, 300));
    frame.pack();
    frame.setVisible(true);
    }}其中
    this.getGlassPane().setVisible(true);是最关键的一个语句。类似于一个mask的作用,呵呵。
    希望能有所帮助。