我有一个客户端 - 服务器应用程序,我在客户端使用swing。我的swing客户端有一个主窗口(jframe)和很多面板,工具栏和菜单栏。 当客户端通过glasssPane等待来自服务器的响应时,我想要删除所有客户端动作/鼠标事件(或者简单地抓取并不执行任何操作)。 这里是我写的代码:使用glasspane从摆动组件中删除鼠标事件/控件
private final static MouseAdapter mouseAdapter = new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
System.out.println("MouseClicked..!");
}
};
private static Cursor WAIT_CURSOR = Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR);
private static Cursor DEFAULT_CURSOR = Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR);
和
public static void startWaitCursor(JComponent comp)
{
MainWindow root = ((MainWindow) comp.getTopLevelAncestor());
root.getGlassPane().setCursor(WAIT_CURSOR);
root.getGlassPane().addMouseListener(mouseAdapter);
root.getGlassPane().setVisible(true);
}
public static void stopWaitCursor(JComponent comp)
{
MainWindow root = ((MainWindow) comp.getTopLevelAncestor());
root.getGlassPane().setCursor(DEFAULT_CURSOR);
root.getGlassPane().setVisible(false);
}
但我不能够管理抓取鼠标事件。在glassPane中更改游标工作正常,但无论是我无法添加mouseAdapter还是无法使glasssPane成为顶级组件。
有什么想法?
谢谢。
对不起,我的代码博客时髦的外观。 我意识到我无法将glassPane设置为最上面的组件。 我设置了背景颜色的玻璃板为粉红色和不透明为真,但我没有看到背景颜色。比如果glassPane不是光标变化的最顶层元素。 – Deger 2010-02-17 14:48:28
我意识到亩代码正在工作,但我的问题是线程相关。我的代码是这样的: startWaitCursor(); work(); //需要花费时间的服务器请求 stopWaitCursor(); 并将其更改为: startWaitCursor(); SwingUtilities.invokeLater(Runnable的新(){ poblic无效的run(){ 尝试 { 工作(); //服务器的请求 } 终于 { stopWaitCursor();} 做此修改我在客户端正在等待来自服务器的响应时,可以看到我在startWaitCursor()方法中所做的设置。 干杯... – Deger 2010-02-18 09:59:47