gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:45:10 38 4
gpt4 key购买 nike

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

我尝试使用 TaskSeries 来实现它,但它为每个操作创建了一个带有一行的图表。如下图所示。

enter image description here

但我想要每台机器一行,如下图所示:

enter image description here

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

我的数据集创建:

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

我还想检查是否有人知道如何将轴更改为整数时间单位(例如,0 1 2 3 4 5 6 7 8 9 10,...,makespan)。

[编辑]

我将添加重现我的问题所需的更多信息。输入:

    Machine m1 = new Machine(1);
Machine m2 = new Machine(2);
Machine m3 = new Machine(3);

Job j1 = new Job(1);
Job j2 = new Job(2);
Job j3 = new Job(3);

j1.setSequence(new ArrayList<OperationSeq>(Arrays.asList(
new OperationSeq[] { new OperationSeq(m1, 7), new OperationSeq(m3, 8), new OperationSeq(m2, 10) })));
j2.setSequence(new ArrayList<OperationSeq>(Arrays.asList(
new OperationSeq[] { new OperationSeq(m2, 6), new OperationSeq(m1, 4), new OperationSeq(m3, 12) })));
j3.setSequence(new ArrayList<OperationSeq>(Arrays.asList(
new OperationSeq[] { new OperationSeq(m1, 8), new OperationSeq(m2, 8), new OperationSeq(m3, 7) })));

数据模型:我正在使用

    Map<Integer, LinkedList<Operation>>

其中键值为机器id,LinkedList为需要放入机器行的操作。

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

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

下面的图片准确地再现了我想要的内容。

Exactly what I want

最佳答案

  1. All operations of a particular job have the same color.

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

    same color

  2. Define a color for each job and its respective operations.

    重写getItemPaint()以提供所需的颜色;这个example为每个子任务提供不同饱和度的调色板。

    different color

  3. Change the Axis to Integer time units.

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

    integer ticks

关于java - JFree 甘特图 - 每个作业和整数时间单位都有不同的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40402219/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com