我是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;
}
我还想检查是否有人知道如何将Axis更改为整数时间单位(例如,0 1 2 3 4 5 6 7 8 9 10,...,制造商)。
[编辑]
我将添加更多信息来重现我的问题。 输入:
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, start = 0,end = 3)。
因此,根据此描述,我们可以看到每个地图键值都是图表中的一行,每个操作都是一列。然后,我想要的是根据操作作业ID更改任务的颜色。
下面的图像正好再现了我想要的东西。