- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我尝试在我的图表中创建一个自定义图例,但是当我显示一个或两个图例时会发生一些奇怪的事情。当我显示 2 个图例(旧图例和新图例)时,一切正常,图例和图表中的颜色都受到尊重。但是,当我只想显示新图例时,图例中的颜色得到尊重,但图表中的颜色不再受到尊重。
这是关于我的问题的示例:你必须评论和反评论一行才能看到问题(见评论)
package org.jfree.chart.demo;
import java.awt.Color;
import java.awt.geom.Ellipse2D;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import javax.swing.JPanel;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.LegendItemCollection;
import org.jfree.chart.LegendItemSource;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CombinedDomainXYPlot;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.time.FixedMillisecond;
import org.jfree.data.time.RegularTimePeriod;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import org.jfree.data.time.TimeSeriesDataItem;
import org.jfree.data.xy.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RefineryUtilities;
public class Sample extends ApplicationFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
private static ArrayList<Date> A;
private static ArrayList<Date> B;
private static ArrayList<Date> C;
private static Calendar t0;
public Sample(String paramString) {
super(paramString);
t0 = Calendar.getInstance();
t0.set(2010, Calendar.JANUARY, 1);
A = new ArrayList<Date>();
B = new ArrayList<Date>();
C = new ArrayList<Date>();
JPanel localJPanel = createDemoPanel();
setContentPane(localJPanel);
}
private static XYPlot createSubplot1(XYDataset paramXYDataset) {
// With Dots
XYLineAndShapeRenderer localXYLineAndShapeRenderer = new XYLineAndShapeRenderer();
localXYLineAndShapeRenderer.setBaseLinesVisible(false);
localXYLineAndShapeRenderer.setUseFillPaint(false);
localXYLineAndShapeRenderer.setBaseFillPaint(Color.white);
localXYLineAndShapeRenderer.setBaseShape(new Ellipse2D.Double(-4.0D,
-4.0D, 8.0D, 8.0D));
localXYLineAndShapeRenderer.setAutoPopulateSeriesShape(false);
NumberAxis localNumberAxis = new NumberAxis("TEST");
localNumberAxis.setVisible(false);
localNumberAxis.setRange(0.5, 1.5);
XYPlot localXYPlot = new XYPlot(paramXYDataset, new DateAxis("Time"),
localNumberAxis, localXYLineAndShapeRenderer);
return localXYPlot;
}
private static JFreeChart createChart() {
CombinedDomainXYPlot localCombinedDomainXYPlot = new CombinedDomainXYPlot(
new DateAxis("Time"));
localCombinedDomainXYPlot.add(createSubplot1(createDataset1()), 1);
JFreeChart localJFreeChart = new JFreeChart("Sample",
localCombinedDomainXYPlot);
localJFreeChart.getLegend().setPosition(RectangleEdge.TOP);
localJFreeChart.getLegend().getItemContainer().getBlocks();
localJFreeChart.setBackgroundPaint(Color.white);
LegendItemCollection legendItemsOld = localCombinedDomainXYPlot
.getLegendItems();
final LegendItemCollection legendItemsNew = new LegendItemCollection();
for (int i = 0; i < legendItemsOld.getItemCount(); i++) {
legendItemsNew.add(legendItemsOld.get(i));
}
LegendItemSource source = new LegendItemSource() {
LegendItemCollection lic = new LegendItemCollection();
{
lic.addAll(legendItemsNew);
}
public LegendItemCollection getLegendItems() {
return lic;
}
};
localJFreeChart.addLegend(new LegendTitle(source));
ChartUtilities.applyCurrentTheme(localJFreeChart);
////////////////////////////////////////////////////////////////////////
/**
* If you comment the following line, two legends are displayed and the
* colors in the graph are respected (yellow, red, blue, red, green)
* However, when you decomment the line, only the new legend is
* displayed. The legend is correct but the colors in the graph are not
* respected anymore (red, yellow, green, yellow, blue)
*/
/////////////////////////////////////////////////////////////////////////
// localJFreeChart.getLegend().setVisible(false);
return localJFreeChart;
}
public static JPanel createDemoPanel() {
return new ChartPanel(createChart());
}
private static XYDataset createDataset1() {
final Calendar out1 = Calendar.getInstance();
out1.set(2009, Calendar.JANUARY, 1);
final Calendar out2 = Calendar.getInstance();
out2.set(2010, Calendar.JANUARY, 3);
final Calendar end = Calendar.getInstance();
end.set(2012, Calendar.SEPTEMBER, 30);
Date date1 = date(t0, 0);
TimeSeries s1 = new TimeSeries("RED");
int i = 0;
TimeSeries s4 = new TimeSeries("YELLOW");
TimeSeries s2 = new TimeSeries("BLUE");
TimeSeries s3 = new TimeSeries("GREEN");
RegularTimePeriod rtpt0 = new FixedMillisecond(t0.getTime());
TimeSeriesDataItem t = new TimeSeriesDataItem(rtpt0, 1);
s4.add(t);
i++;
int interval = 57;
date1 = date(t0, 0 + interval * i);
Calendar d1;
while (date1.before(date(end, 0))) {
while (date1.before(date(end, 0)) && i < 8) {
RegularTimePeriod rtp = new FixedMillisecond(date1.getTime());
A.add(date1);
t = new TimeSeriesDataItem(rtp, 1);
s1.add(t);
d1 = Calendar.getInstance();
d1.setTimeInMillis(date1.getTime());
date1 = date(d1, 0 + interval);
i++;
}
if (date1.before(date(end, 0))) {
RegularTimePeriod rtp = new FixedMillisecond(date1.getTime());
B.add(date1);
t = new TimeSeriesDataItem(rtp, 1);
s2.add(t);
d1 = Calendar.getInstance();
d1.setTimeInMillis(date1.getTime());
date1 = date(d1, 0 + interval);
}
d1 = Calendar.getInstance();
d1.setTimeInMillis(date1.getTime());
date1 = date(d1, 14);
i = 1;
while (date1.before(date(end, 0)) && i < 8) {
RegularTimePeriod rtp = new FixedMillisecond(date1.getTime());
A.add(date1);
t = new TimeSeriesDataItem(rtp, 1);
s1.add(t);
d1 = Calendar.getInstance();
d1.setTimeInMillis(date1.getTime());
date1 = date(d1, 0 + interval);
i++;
}
i = 0;
if (date1.before(date(end, 0))) {
RegularTimePeriod rtp = new FixedMillisecond(date1.getTime());
C.add(date1);
t = new TimeSeriesDataItem(rtp, 1);
s3.add(t);
d1 = Calendar.getInstance();
d1.setTimeInMillis(date1.getTime());
date1 = date(d1, 0 + interval);
}
d1 = Calendar.getInstance();
d1.setTimeInMillis(date1.getTime());
date1 = date(d1, 61);
}
TimeSeriesCollection dataset = new TimeSeriesCollection();
dataset.addSeries(s1);
dataset.addSeries(s2);
dataset.addSeries(s3);
dataset.addSeries(s4);
return dataset;
}
/**
* Utility method for creating <code>Date</code> objects.
*
* @param day
* the date.
* @param month
* the month.
* @param year
* the year.
*
* @return a date.
*/
private static Date date(Calendar calendar, int daysPlus) {
final Calendar calendarResult = (Calendar) calendar.clone();
calendarResult.add(Calendar.DAY_OF_MONTH, daysPlus);
final Date result = calendarResult.getTime();
return result;
}
public static void main(String[] paramArrayOfString) {
Sample localXYTaskDatasetDemo2 = new Sample("Sample");
localXYTaskDatasetDemo2.pack();
RefineryUtilities.centerFrameOnScreen(localXYTaskDatasetDemo2);
localXYTaskDatasetDemo2.setVisible(true);
}
感谢您的帮助。
最佳答案
是您调用 ChartUtilities.applyCurrentTheme
覆盖了颜色。
另一件事:当您需要删除标准图表时,您应该使用 chart.removeLegend()
方法。解决方案见以下代码。
private static JFreeChart createChart() {
CombinedDomainXYPlot localCombinedDomainXYPlot = new CombinedDomainXYPlot(new DateAxis("Time"));
JFreeChart localJFreeChart = new JFreeChart("Sample", localCombinedDomainXYPlot);
localCombinedDomainXYPlot.add(createSubplot1(createDataset1()), 1);
ChartUtilities.applyCurrentTheme(localJFreeChart);
localJFreeChart.setBackgroundPaint(Color.white);
final LegendItemCollection legendItemsOld = localCombinedDomainXYPlot.getLegendItems();
LegendItemSource source = new LegendItemSource() {
public LegendItemCollection getLegendItems() {
LegendItemCollection lic = new LegendItemCollection();
int itemCount = legendItemsOld.getItemCount();
for (int i = 0; i < itemCount; i++) {
lic.add(legendItemsOld.get(i));
}
return lic;
}
};
localJFreeChart.removeLegend();
localJFreeChart.addLegend(new LegendTitle(source));
localJFreeChart.getLegend().setPosition(RectangleEdge.TOP);
localJFreeChart.getLegend().getItemContainer().getBlocks();
return localJFreeChart;
}
关于java - JFreeChart - 具有 2 个图例的颜色问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5800774/
我正在编写一个具有以下签名的 Java 方法。 void Logger(Method method, Object[] args); 如果一个方法(例如 ABC() )调用此方法 Logger,它应该
我是 Java 新手。 我的问题是我的 Java 程序找不到我试图用作的图像文件一个 JButton。 (目前这段代码什么也没做,因为我只是得到了想要的外观第一的)。这是我的主课 代码: packag
好的,今天我在接受采访,我已经编写 Java 代码多年了。采访中说“Java 垃圾收集是一个棘手的问题,我有几个 friend 一直在努力弄清楚。你在这方面做得怎么样?”。她是想骗我吗?还是我的一生都
我的 friend 给了我一个谜语让我解开。它是这样的: There are 100 people. Each one of them, in his turn, does the following
如果我将使用 Java 5 代码的应用程序编译成字节码,生成的 .class 文件是否能够在 Java 1.4 下运行? 如果后者可以工作并且我正在尝试在我的 Java 1.4 应用程序中使用 Jav
有关于why Java doesn't support unsigned types的问题以及一些关于处理无符号类型的问题。我做了一些搜索,似乎 Scala 也不支持无符号数据类型。限制是Java和S
我只是想知道在一个 java 版本中生成的字节码是否可以在其他 java 版本上运行 最佳答案 通常,字节码无需修改即可在 较新 版本的 Java 上运行。它不会在旧版本上运行,除非您使用特殊参数 (
我有一个关于在命令提示符下执行 java 程序的基本问题。 在某些机器上我们需要指定 -cp 。 (类路径)同时执行java程序 (test为java文件名与.class文件存在于同一目录下) jav
我已经阅读 StackOverflow 有一段时间了,现在我才鼓起勇气提出问题。我今年 20 岁,目前在我的家乡(罗马尼亚克卢日-纳波卡)就读 IT 大学。足以介绍:D。 基本上,我有一家提供簿记应用
我有 public JSONObject parseXML(String xml) { JSONObject jsonObject = XML.toJSONObject(xml); r
我已经在 Java 中实现了带有动态类型的简单解释语言。不幸的是我遇到了以下问题。测试时如下代码: def main() { def ks = Map[[1, 2]].keySet()
一直提示输入 1 到 10 的数字 - 结果应将 st、rd、th 和 nd 添加到数字中。编写一个程序,提示用户输入 1 到 10 之间的任意整数,然后以序数形式显示该整数并附加后缀。 public
我有这个 DownloadFile.java 并按预期下载该文件: import java.io.*; import java.net.URL; public class DownloadFile {
我想在 GUI 上添加延迟。我放置了 2 个 for 循环,然后重新绘制了一个标签,但这 2 个 for 循环一个接一个地执行,并且标签被重新绘制到最后一个。 我能做什么? for(int i=0;
我正在对对象 Student 的列表项进行一些测试,但是我更喜欢在 java 类对象中创建硬编码列表,然后从那里提取数据,而不是连接到数据库并在结果集中选择记录。然而,自从我这样做以来已经很长时间了,
我知道对象创建分为三个部分: 声明 实例化 初始化 classA{} classB extends classA{} classA obj = new classB(1,1); 实例化 它必须使用
我有兴趣使用 GPRS 构建车辆跟踪系统。但是,我有一些问题要问以前做过此操作的人: GPRS 是最好的技术吗?人们意识到任何问题吗? 我计划使用 Java/Java EE - 有更好的技术吗? 如果
我可以通过递归方法反转数组,例如:数组={1,2,3,4,5} 数组结果={5,4,3,2,1}但我的结果是相同的数组,我不知道为什么,请帮助我。 public class Recursion { p
有这样的标准方式吗? 包括 Java源代码-测试代码- Ant 或 Maven联合单元持续集成(可能是巡航控制)ClearCase 版本控制工具部署到应用服务器 最后我希望有一个自动构建和集成环境。
我什至不知道这是否可能,我非常怀疑它是否可能,但如果可以,您能告诉我怎么做吗?我只是想知道如何从打印机打印一些文本。 有什么想法吗? 最佳答案 这里有更简单的事情。 import javax.swin
我是一名优秀的程序员,十分优秀!