繁体   English   中英

swing:在JDialog上设置光标

[英]swing: setting cursor on JDialog

我在对话框中有一个JPanel。 MouseListener侦听鼠标的运动,当鼠标位于特定位置时,我在面板上调用setCursor()来更改光标。

一切正常,直到我从该对话框中打开另一个对话框,然后再次将其关闭。 (例如:警告消息(JOptionPane)或新定制的JDialog。执行此操作后,尽管我仍然称呼'setCursor',但光标不会再次更改。

有人知道会发生什么吗? 以及如何解决呢?

我尝试了以下操作,并且在显示另一个JDialog (在Windows上为JDK 1.6.0_12)之后也可以正常工作。

鼠标光标在水平方向每隔50个像素更改一次,单击JPanel将打开模式JDialog 再次将其关闭,鼠标光标仍会更改。

public class DialogCursorTest extends JDialog{
    public DialogCursorTest() {
        final JPanel panel = new JPanel();
        panel.addMouseMotionListener(new MouseMotionAdapter() {
            Cursor handCursor = new Cursor(Cursor.HAND_CURSOR);
            @Override
            public void mouseMoved(MouseEvent e) {
                if(e.getX() % 100 > 50) {
                    if(panel.getCursor() != handCursor) {
                        panel.setCursor(handCursor);
                    }
                }
                else {
                    if(panel.getCursor() == handCursor) {
                        panel.setCursor(Cursor.getDefaultCursor());
                    }
                }
            }
        });

        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                new JDialog(DialogCursorTest.this, "Test", true).setVisible(true);
            }
        });

        getContentPane().add(panel);
    }

    public static void main(String[] args) {
        DialogCursorTest test = new DialogCursorTest();
        test.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        test.setSize(400, 300);
        test.setVisible(true);
    }
}

我找到了解决方案:问题是我有1帧和1个对话框。 该框架是主框架,随后将创建对话框。 从对话框中,我调用new JDialog(null, "title"); 除了应该使用null之外,我还应该添加调用对话框,因为关闭对话框后,焦点移到了主框架上,尽管在我的Mac上看起来好像焦点在对话框上了...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM