当前位置: 首页 > 面试题库 >

选择要显示的数据系列

韩弘壮
2023-03-14
问题内容

我希望能够选择要显示的系列。例如,只有在0°和20°人。是否有一种简单的方法可以通过不使用图表来操作图表JCheckBox?我希望能够做到这一点,例如,通过单击该系列的图例。


问题答案:

如所示在这里,JCheckBox是更灵活,但直接点击在图表上可能更方便。下面的示例添加了一个 ,当单击 序列中的或其时,该序列将不可见。 当然,一旦一个系列不可见,就不能再次单击它。您将需要一种恢复可见性的方法。在一些替代方案中,第一种方案 如下所示:

ChartMouseListener

XYItemEntity

LegendItemEntity

单击图表上的其他位置,可恢复所有系列的可见性。

将此与上面引用的方法结合起来,JCheckBox在实现时相应地进行切换chartMouseClicked()

在按钮处理程序中循环浏览系列,以恢复每个系列的可见性。

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import org.jfree.chart.ChartMouseEvent;
import org.jfree.chart.ChartMouseListener;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.entity.ChartEntity;
import org.jfree.chart.entity.LegendItemEntity;
import org.jfree.chart.entity.XYItemEntity;
import org.jfree.chart.labels.StandardXYToolTipGenerator;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

/** @see https://stackoverflow.com/a/43286042/230513 */
public class VisibleTest {

    private void display() {
        JFrame f = new JFrame("Test");
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        XYSeriesCollection dataset = new XYSeriesCollection();
        for (int i = 0; i < 3; i++) {
            XYSeries series = new XYSeries("value" + i);
            for (double t = 0; t < 2 * Math.PI; t += 0.5) {
                series.add(t, Math.sin(t) + i);
            }
            dataset.addSeries(series);
        }
        NumberAxis xAxis = new NumberAxis("domain");
        NumberAxis yAxis = new NumberAxis("range");
        XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, true);
        renderer.setBaseToolTipGenerator(new StandardXYToolTipGenerator());
        XYPlot plot = new XYPlot(dataset, xAxis, yAxis, renderer);
        JFreeChart chart = new JFreeChart("Test", plot);
        ChartPanel chartPanel = new ChartPanel(chart) {
            @Override
            public Dimension getPreferredSize() {
                return new Dimension(640, 480);
            }
        };
        chartPanel.addChartMouseListener(new ChartMouseListener() {
            @Override
            public void chartMouseClicked(ChartMouseEvent e) {
                ChartEntity ce = e.getEntity();
                if (ce instanceof XYItemEntity) {
                    XYItemEntity item = (XYItemEntity) ce;
                    renderer.setSeriesVisible(item.getSeriesIndex(), false);
                } else if (ce instanceof LegendItemEntity) {
                    LegendItemEntity item = (LegendItemEntity) ce;
                    Comparable key = item.getSeriesKey();
                    renderer.setSeriesVisible(dataset.getSeriesIndex(key), false);
                } else {
                    for (int i = 0; i < dataset.getSeriesCount(); i++) {
                        renderer.setSeriesVisible(i, true);
                    }
                }
            }

            @Override
            public void chartMouseMoved(ChartMouseEvent e) {}
        });

        f.add(chartPanel);
        f.pack();
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new VisibleTest()::display);
    }
}


 类似资料:
  • Jenkins想添加一个参数。列表是固定的,但我希望dropbox显示自定义值,而不是实际值(类似于网页的名称,而不是其URL)。 在某些情况下,这是文件,但是,我想显示模块名,而不是完整路径。举个例子: 感谢您的帮助提前!

  • 问题内容: models.py: views.py: 在模板上,当我调用时,我得到而不是。 如何显示值(或)而不是代码()? 问题答案: 看来你走在正确的轨道上- 无疑是你想要的: 在模板中,你不包括方法名称。请执行下列操作:

  • 问题内容: 好的,一段时间以来,我一直在寻找答案,但我遇到的所有问题(甚至在搜索javascript时)都与jQuery结合在一起!没人再使用普通的javascript吗?!? 因此,我想要一个下拉列表(使用多个选项进行选择)。选择某个选项后,我希望显示一个隐藏的div。 然后,我尝试使用以下JavaScript代码: 我猜我的问题出在选项中的onClick触发器上,但是我不确定还有什么用?或者,

  • 我正在创建具有下拉列表视图的页面。现在我在列表视图中显示完整数据。如果我想要任何特定的日期数据,那么我需要做什么。请帮我解决这个问题。下面是我正在获取的JSON。 下面是代码

  • 我有一个带有自定义适配器的 GridView,当我从列表中选择一个项目时,选择器会显示一秒钟并消失。我猜自定义适配器会导致它,我尝试使用它和选择器,但无济于事。 下面是我的适配器(基于“Hello,Views”中的网格视图示例): 布局是这样的: 谢谢你的帮助。 下面是GridView的一个截图(现在,所有的条目都有相同的图片)。我想在选中的图像周围画一个某种颜色的框,但是我得到一个橙色的矩形,一

  • 问题内容: 我用。字段之一是: 我需要更改其显示类型。我不想在显示中使用(或在Python 2中),而是要显示曲目的名称和日期。 我该怎么做? 问题答案: 子类并重写以返回曲目名称和日期。然后在中使用新字段。