java - SWT 堆积条形图显示总值

标签 java swt eclipse-rcp swtchart

我正在使用 SWT 图表,我的堆积条形图如下图所示。 条形字符表示服务的响应时间。深蓝色条代表响应时间的技术部分,浅蓝色条代表思考时间。

enter image description here

我现在的问题是是否可以在浅蓝色栏中显示总响应时间而不是仅显示思考时间。例如,在第三行中,总响应时间为 10952 毫秒(技术响应时间 + 思考时间),但它仅显示思考时间,即 10000 毫秒。 有谁知道如何将其实现到 SWT 条形图中? 预先感谢您的帮助。

最佳答案

好的,我现在可以通过添加一个 SWT 绘制监听器来解决问题,该监听器为每个条绘制文本:

plotArea.addListener(SWT.Paint, new Listener() {

        /**
         * The x-axis offset
         */
        private int xAxisOffset = 8;

        /**
         * The y-axis offset.
         */
        private int yAxisOffset = 3;

        @Override
        public void handleEvent(final Event event) {
            GC gc = event.gc;

            ISeries[] series = chart.getSeriesSet().getSeries();

            for (double xAxis : series[0].getXSeries()) {

                double techTime = series[0].getYSeries()[(int) xAxis];
                double thinkTime = series[1].getYSeries()[(int) xAxis];

                int totalTime = (int) Math.round(techTime + thinkTime);
                int xCoord = chart.getAxisSet().getXAxis(0).getPixelCoordinate(xAxis) - this.xAxisOffset;
                int yCoord = chart.getAxisSet().getYAxis(0).getPixelCoordinate(totalTime / this.yAxisOffset);

                gc.drawText(totalTime + " ms", yCoord, xCoord, SWT.DRAW_TRANSPARENT);
            }
        }
});

之后,SWT 条形图如下所示: enter image description here

此外,为了分别显示深蓝色条和浅蓝色条的值,我添加了一个监听器,当鼠标悬停在工具提示文本上时,它会在工具提示文本中显示相应的值:

plotArea.addListener(SWT.MouseHover, new Listener() {

        @Override
        public void handleEvent(final Event event) {
            IAxis xAxis = chart.getAxisSet().getXAxis(0);
            IAxis yAxis = chart.getAxisSet().getYAxis(0);

            int x = (int) Math.round(xAxis.getDataCoordinate(event.y));
            double y = yAxis.getDataCoordinate(event.x);

            ISeries[] series = chart.getSeriesSet().getSeries();

            double currentY = 0.0;
            ISeries currentSeries = null;

            /* over all series */
            for (ISeries serie : series) {
                double[] yS = serie.getYSeries();

                if (x < yS.length && x >= 0) {
                    currentY += yS[x];
                    currentSeries = serie;

                    if (currentY > y) {
                        y = yS[x];
                        break;
                    }
                }
            }

            if (currentY >= y) {
                plotArea.setToolTipText(currentSeries.getDescription() + ": " + Math.round(y) + " ms");
            } else {
                plotArea.setToolTipText(null);
            }
        }
});

关于java - SWT 堆积条形图显示总值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33839306/

相关文章:

java - 回文数

java - JPA 关系实体在数据库上更新,但不在现场更新

java - SWTChart 鼠标悬停处理

java - 如何使用 JFace MenuManager 将文本框添加到子菜单?

java - 加载自定义 Android View 时出错 : Resources$NotFoundException: Resource ID #0x7f060007 type #0x12 is not valid

java - 使用 Maven 为 SWT 应用程序构建多平台可执行文件

java - 如何获取特定 eclipse.core.command 的处理程序

java - Eclipse e4 禁用最大化部分

java - 如何移动 Eclipse RCP 项目 .pref 文件

java - JUnit:忽略方法调用