You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取JOptionPane.showMessageDialog内容及获取鼠标点击位置

问题解答

问题1:如何读取JOptionPane.showMessageDialog的内容?

首先得明确:JOptionPane.showMessageDialog()本身是仅用于展示消息的弹窗,它的设计逻辑里,你调用它时传入的消息内容,其实你自己已经持有啦!比如你写:

String showContent = "这是弹窗要显示的文本";
JOptionPane.showMessageDialog(null, showContent);

直接用变量showContent就能拿到这个内容。

如果你的场景是想捕获非自己代码弹出的showMessageDialog内容,或者需要动态获取弹窗内的文本,默认的JOptionPane内部组件是封装起来的,没法直接读取。这时候可以自定义一个对话框,把展示的内容存下来:

public class CustomMessageDialog extends JOptionPane {
    private String displayedMsg;

    public CustomMessageDialog(String message) {
        displayedMsg = message;
        showMessageDialog(null, message);
    }

    public String getDisplayedMessage() {
        return displayedMsg;
    }
}

// 使用示例
CustomMessageDialog dialog = new CustomMessageDialog("自定义弹窗的内容");
String content = dialog.getDisplayedMessage();

问题2:获取JxBrowser中鼠标点击的位置

你的代码没写完,我给你两种实用的实现方式:

方式1:给BrowserView添加Java层面的鼠标监听器

直接给Swing的BrowserView组件加鼠标监听,能拿到相对于组件的点击坐标,还能转成页面内的坐标:

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;

public class Test {
    public static void main(String[] args) {
        final Browser browser = new Browser();
        BrowserView view = new BrowserView(browser);

        // 添加鼠标点击监听
        view.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                // 获取相对于BrowserView组件的坐标
                int compX = e.getX();
                int compY = e.getY();
                System.out.println("组件内点击位置:x=" + compX + ", y=" + compY);
                
                // 转换为网页页面内的坐标
                com.teamdev.jxbrowser.chromium.Point pagePoint = view.toPagePoint(new Point(compX, compY));
                System.out.println("页面内点击位置:x=" + pagePoint.getX() + ", y=" + pagePoint.getY());
            }
        });

        // 初始化窗口
        JFrame frame = new JFrame("JxBrowser 鼠标点击测试");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(view, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        browser.loadURL("https://www.example.com");
    }
}

方式2:通过JavaScript监听页面点击,传递坐标到Java

如果需要更精准的网页内坐标(比如相对于文档的位置),可以注入JS监听点击事件,再把坐标传给Java代码:

import com.teamdev.jxbrowser.chromium.Browser;
import com.teamdev.jxbrowser.chromium.JSFunctionCallback;
import com.teamdev.jxbrowser.chromium.JSObject;
import com.teamdev.jxbrowser.chromium.swing.BrowserView;
import javax.swing.*;
import java.awt.*;

public class Test {
    public static void main(String[] args) {
        final Browser browser = new Browser();
        BrowserView view = new BrowserView(browser);

        // 页面加载完成后注入JS监听
        browser.addLoadListener(new com.teamdev.jxbrowser.chromium.LoadListener() {
            @Override
            public void onStartLoadingFrame(com.teamdev.jxbrowser.chromium.LoadEvent event) {}

            @Override
            public void onFinishLoadingFrame(com.teamdev.jxbrowser.chromium.LoadEvent event) {
                if (event.isMainFrame()) {
                    // 获取网页的window对象
                    JSObject window = browser.executeJavaScriptAndReturnValue("window").asObject();
                    // 注册Java回调函数给JS调用
                    window.setProperty("reportClickPos", new JSFunctionCallback() {
                        @Override
                        public Object invoke(Object... args) {
                            int pageX = (int) args[0];
                            int pageY = (int) args[1];
                            System.out.println("JS传递的页面点击位置:x=" + pageX + ", y=" + pageY);
                            return null;
                        }
                    });

                    // 注入JS代码,监听页面点击事件
                    browser.executeJavaScript(
                        "document.addEventListener('click', function(e) {" +
                        "   reportClickPos(e.clientX, e.clientY);" +
                        "});"
                    );
                }
            }

            @Override
            public void onFailLoadingFrame(com.teamdev.jxbrowser.chromium.LoadEvent event) {}

            @Override
            public void onDocumentLoadedInFrame(com.teamdev.jxbrowser.chromium.LoadEvent event) {}
        });

        // 初始化窗口
        JFrame frame = new JFrame("JxBrowser JS监听点击");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.add(view, BorderLayout.CENTER);
        frame.setSize(800, 600);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);

        browser.loadURL("https://www.example.com");
    }
}

内容的提问来源于stack exchange,提问作者DIIMIIM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:45:12