java - 如何在java中根据鼠标位置弹出字符串描述

标签 java dialog popup

问题很简单。我想创建一个框,然后在鼠标附近弹出一个小字符串,指示当前鼠标位置是框的“内部”或“外部”。尽管解决方案对我来说并不明显。我不想要一个大的对话框组件,只想要像文本本身一样小的东西,而且生命周期很短。

有人可以向我指出一个可以做到这一点的类(class)吗?

最佳答案

尝试设置 Tooltip到框组件,另一个工具提示到背景。

例如:

public class Test {

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                final JFrame jf = new JFrame();
                jf.setSize(800, 600);
                jf.setTitle("Test");
                jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                jf.getContentPane().setLayout(new BorderLayout());
                final JPanel panel = new JPanel();
                panel.setBackground(Color.red);
                jf.getContentPane().add(panel, BorderLayout.CENTER);
                jf.setVisible(true);

                final JPanel box = new JPanel();
                box.setPreferredSize(new Dimension(100, 100));
                box.setBackground(Color.black);

                panel.add(box, BorderLayout.CENTER);
                box.setToolTipText("Inside");
                panel.setToolTipText("Outside");
            }
        });
    }
}

在本例中,这是在面板上绘制的点附近或外部设置工具提示的示例:

public class Test {

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable(){
            @Override
            public void run() {
                final JFrame jf = new JFrame();
                jf.setSize(800, 600);
                jf.setTitle("Test");
                jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                jf.getContentPane().setLayout(new BorderLayout());
                final int px = 200;
                final int py = 200;
                final int delta  = 10;
                final JPanel panel = new JPanel(){
                    @Override
                    protected void paintComponent(final java.awt.Graphics g) {
                        super.paintComponent(g);
                        final Color c = g.getColor();
                        g.setColor(Color.yellow);
                        g.fillOval(px - delta/2, py - delta/2, delta, delta);
                        g.setColor(c);
                    }
                };
                panel.setBackground(Color.red);

                panel.addMouseMotionListener(new MouseAdapter() {
                    @Override
                    public void mouseMoved(final MouseEvent e) {
                        final int x = e.getX();
                        final int y = e.getY();
                        if (Math.abs(x - px) < delta && Math.abs(y - py) < delta){
                            panel.setToolTipText("Point!");
                        }else{
                            panel.setToolTipText("Outside");
                        }
                    }
                });

                jf.getContentPane().add(panel, BorderLayout.CENTER);
                jf.setVisible(true);
            }
        });
    }
}

关于java - 如何在java中根据鼠标位置弹出字符串描述,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31947327/

相关文章:

java - bash中如何模拟ctrl+c复制文件

android - 在对话框中打开时删除编辑文本的默认矩形边框

delphi - 如何显示一个像弹出菜单一样的窗口?

javascript - 我们在 SharePoint 中使用的 javascript 窗口解决方案的 jquery 弹出替代方案

javascript - 在 Firefox 中捕获弹出窗口并通知用户

javascript - 如何在同一项目中为 java 和 javascript 配置 Sonarqube 扫描器

vb.net - 如何创建用户可以输入文本的 Visual Basic 对话框

android - 如何去除对话框中的白色边框?

java - Netbeans 是否内置 Maven?