Java选择加入org_java – 选择要显示的数据系列

如here所示,JCheckBox更灵活,但直接点击图表可能更方便.下面的示例添加了一个ChartMouseListener,当单击系列中的XYItemEntity或其LegendItemEntity时,系列不可见.当然,一旦一个系列不可见,它就不能再次点击;你需要一种方法来恢复可见性.在一些替代方案中,第一个如下图所示:

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

>将此与上面引用的方法相结合,在mapMouseClicked()的实现中相应地切换JCheckBox.

>在按钮处理程序中循环播放该系列,恢复每个系列的可见性.

DEz2K.png

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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值