Java JFree甘特图-每个作业和整数时间单位的不同颜色

Java JFree甘特图-每个作业和整数时间单位的不同颜色,java,jfreechart,gantt-chart,Java,Jfreechart,Gantt Chart,我是使用JFree的新手。我想知道如何创建数据集,使特定作业的所有操作具有相同的颜色(例如,O111、O122、O133、O144具有相同的颜色,机器与图像2成一行) 我尝试使用TaskSeries创建它,但它会为每个操作创建一个带有一行的图形。如下图所示 但我希望每台机器有一行,如下图所示: 但是,我想为每个作业及其各自的操作定义一种颜色 我的数据集创建: public static IntervalCategoryDataset createDataset(Map<Integer,

我是使用JFree的新手。我想知道如何创建数据集,使特定作业的所有操作具有相同的颜色(例如,O111、O122、O133、O144具有相同的颜色,机器与图像2成一行)

我尝试使用TaskSeries创建它,但它会为每个操作创建一个带有一行的图形。如下图所示

但我希望每台机器有一行,如下图所示:

但是,我想为每个作业及其各自的操作定义一种颜色

我的数据集创建:

public static IntervalCategoryDataset createDataset(Map<Integer, LinkedList<Operation>> lines, Integer makespan) {

    /*Map<Integer, TaskSeries> mapSeries = new HashMap<>();

    for (Map.Entry<Integer, LinkedList<Operation>> entry : lines.entrySet()) {
        for (int k = 0; k < entry.getValue().size(); k++) {
            if (mapSeries.get(entry.getValue().get(k).getJ().getId()) == null) {
                TaskSeries series = new TaskSeries("Job " + entry.getValue().get(k).getJ().getId());
                mapSeries.put(entry.getValue().get(k).getJ().getId(), series);
            }
        }
    }*/

    TaskSeries seriesOne = new TaskSeries("Scheduled");

    for (Map.Entry<Integer, LinkedList<Operation>> entry : lines.entrySet()) {
        Task mainTask = new Task("Machine" + entry.getKey(), new SimpleTimePeriod(0, makespan));

        for (int k = 0; k < entry.getValue().size(); k++) {

            Task subtask = new Task(entry.getValue().get(k).getName(),
                    new SimpleTimePeriod(entry.getValue().get(k).getStart(), entry.getValue().get(k).getEnd()));

            subtask.setDescription(entry.getValue().get(k).getName());
            //mapSeries.get(entry.getValue().get(k).getJ().getId()).add(subtask);
            mainTask.addSubtask(subtask);
        }
        seriesOne.add(mainTask);
        System.out.println();
    }

    final TaskSeriesCollection collection = new TaskSeriesCollection();
    collection.add(seriesOne); 

    return collection;
}
publicstaticintervalcategorydataset-createDataset(映射线,整数makespan){
/*Map mapSeries=新HashMap();
for(Map.Entry:lines.entrySet()){
for(int k=0;k
我还想检查是否有人知道如何将轴更改为整数时间单位(例如,0 1 2 3 4 5 6 7 8 9 10,…,makespan)

[编辑]

我会添加更多的信息来重现我的问题。 输入:

机器m1=新机器(1);
机器m2=新机器(2);
机器m3=新机器(3);
作业j1=新作业(1);
作业j2=新作业(2);
作业j3=新作业(3);
j1.设置顺序(新ArrayList(Arrays.asList(
新操作等式【】{新操作等式(m1,7),新操作等式(m3,8),新操作等式(m2,10)});
j2.设置顺序(新ArrayList(Arrays.asList(
新操作等式【】{新操作等式(m2,6),新操作等式(m1,4),新操作等式(m3,12)});
j3.setSequence(新的ArrayList(Arrays.asList(
新操作等式【】{新操作等式(m1,8),新操作等式(m2,8),新操作等式(m3,7)});
数据模型:我使用的是

    Map<Integer, LinkedList<Operation>>
Map
其中,键值是机器id,LinkedList是需要放置在机器行中的操作

每个操作都包含其各自的作业id、序列id、机器id和时间间隔整数开始、整数结束(例如,来自作业1的操作,序列1(作业1的第一个操作),机器1,开始=0,结束=3)

根据这个描述,我们可以看到每个映射键值都是图表中的一行,每个操作都是一列。然后,我想要的是根据操作作业id更改任务的颜色

下面的图片正是我想要的

  • 特定作业的所有操作都具有相同的颜色

    使用相同的
    TaskSeries
    从默认的
    DrawingSupplier
    获取第一种颜色,如图所示

  • 为每个作业及其各自的操作定义颜色

    覆盖
    getItemPaint()
    以提供所需的颜色;这为每个子任务提供了一个不同饱和度的调色板

  • 更改为
    整数
    时间单位

    由相关的
    ChartFactory
    实例化的
    DateAxis
    将数据值解释为从Java纪元开始的毫秒;要更改显示,请使用所需格式覆盖
    setDateFormatOverride()
    ,如图所示


  • 我张贴了一张图片,只是为了确保我能用问题1和2的答案完成它。我想在各自的机器中代表每个操作。作业n的每次操作(颜色为n)和作业n+1的每次操作(颜色为n+1)。我想用图像会更清晰。我不理解您的数据模型,但视图看起来是可行的;请你的问题包括你的图片和一个显示你修改方法的图片。亲爱的垃圾神,我添加了更多的部分来重现我的问题。我不理解这些部分。请编辑您的问题,使其包含一个显示您描述的问题的图表。但您只需要了解地图。如果你明白了,你就会明白一切。每个键都是行,每个值都是包含时间间隔的列(操作)。这就是我想在图表上绘制的内容。
        Map<Integer, LinkedList<Operation>>