【问题标题】:swing: setting cursor on JDialogswing:在 JDialog 上设置光标
【发布时间】:2010-02-22 08:49:05
【问题描述】:

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

这一切都很好,直到我从这个对话框中打开另一个对话框并再次关闭它。 (例如:一个警告信息(JOptionPane),或者一个新的自定义JDialog。这个动作之后,光标不再改变,虽然我还是调用了'setCursor'。

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

【问题讨论】:

    标签: java swing cursor jdialog


    【解决方案1】:

    我尝试了以下操作,但在显示另一个 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);
        }
    }
    

    【讨论】:

    • 也适用于我,今晚我将在我的 Mac 上测试它。并尝试找出有什么区别:(
    【解决方案2】:

    我找到了解决方案:问题是我有 1 个框架和 1 个对话框。框架是主框架,随后创建对话框。从对话框中,我调用new JDialog(null, "title"); 而不是使用null,我应该添加调用对话框,因为关闭对话框后,焦点转到主框架,虽然在我的mac上看起来焦点在对话框上...

    【讨论】:

    • 总而言之:关闭对话框将使焦点返回其父级。如果没有定义父级,则返回主框架。很高兴知道。我认为focus 是指输入焦点,而不是鼠标焦点。
    猜你喜欢
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2013-09-25
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多