当前位置:  开发笔记 > 编程语言 > 正文

有没有什么好的工具可以找到GUI的使用统计信息,细分窗格和组件?

如何解决《有没有什么好的工具可以找到GUI的使用统计信息,细分窗格和组件?》经验,为你挑选了1个好方法。

在网站上收集每个网页的使用情况统计数据是常见的做法,我对类似的事情感兴趣,但对于GUI:s.您会看到谷歌浏览器(和其他人)收集使用情况统计数据,以便谷歌可以找出人们使用的功能,以便对数据进行数据挖掘.

一种直接的方法是明确记录与每个GUI元素的交互,但这既繁琐又容易出现GUI缺失部分的错误.

所以我想知道,这是一个解决的问题吗?是否存在可以提供类似于每个组件细分的代码分析,指标(访问次数,点击次数等)的摘要?自动添加到整个AWT/Swing组件树中的所有组件?

此信息需要汇总到一个文件中,以便可以将其发送给"我们"进行聚合和数据挖掘,以推动决策等.

我真的不知道我到底想要什么,所以我也要求找出好的想法和其他人所面对的这个问题.



1> gencoreopera..:

虽然这不是一个完整的解决方案,但它可能有助于指导您更接近可行的事情.我同意上一张海报,可以在代码中添加钩子,这在大型项目中变得无法管理.此外,如果您错过了应用程序的一部分并开始检查数据,则每次用户使用该组件时都会有一个空白区域.

相反,您可以直接监听由UI中的每个组件生成的AWTEvents.这很容易成为数据挖掘的源信息.以下代码显示了如何完成此操作:

package awteventlistenerexample;

import java.awt.AWTEvent;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.AWTEventListener;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

public class Test {
    private static final String ACTION_CLOSE = "Close";
    private JFrame frame;
    public Test() {
        frame = new JFrame();
        initActions();
        frame.setLayout(new BorderLayout());
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                frame.getRootPane().getActionMap().get(ACTION_CLOSE).actionPerformed(null);
            }
        });

        JPanel content = new JPanel(new FlowLayout());
        content.add(new JLabel("Creature"));
        JButton badger = new JButton("Badger");
        badger.setName("badger");
        JButton ferret = new JButton("Ferret");
        ferret.setName("ferret");
        JButton stoat = new JButton("Stoat");
        stoat.setName("stoat");
        content.add(badger);
        content.add(ferret);
        content.add(stoat);
        frame.add(content, BorderLayout.CENTER);

        JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
        JButton close = new JButton(frame.getRootPane().getActionMap().get(ACTION_CLOSE));
        buttonPanel.add(close);

        frame.add(buttonPanel, BorderLayout.SOUTH);
        frame.setSize(200, 150);
        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
    }

    private void initActions() {
        Action close = new AbstractAction("Close") {
            public void actionPerformed(ActionEvent e) {
                frame.dispose();
            }
        };
        frame.getRootPane().getActionMap().put(ACTION_CLOSE, close);
    }

    public static void main(String args[]) {
        // Attach listener to AWTEvents (Mouse Events)
        Toolkit.getDefaultToolkit().addAWTEventListener(new AWTEventListener() {
            public void eventDispatched(AWTEvent event) {
                if (event instanceof MouseEvent) {
                    MouseEvent m = (MouseEvent) event;
                    if (m.getID() == MouseEvent.MOUSE_CLICKED) {
                        System.out.println(m.toString());
                    }
                }
            }
        }, AWTEvent.MOUSE_EVENT_MASK);

        EventQueue.invokeLater(new Runnable() {
            public void run() {
                new Test();
            }
        });
    }
}

在这种情况下,我听了鼠标事件.这些似乎是最有用的,因为它们可以告诉您用户点击了什么.从这里开始,您需要找出需要收集的内容,以便建立用户点击内容的图片.我也会对用户没有点击的内容感兴趣.

围绕使用此技术的自动UI测试有很多工作要做.Abbot和FEST是我用过的例子.您可能希望了解它们如何处理AWTEvents以防有任何有用的东西.

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有