Cómo mostrar información de cada tarea en el diagrama de Gantt.

Estoy usando Jfreechart para escribir un proyecto de análisis de archivo de registro, tengo un problema de sobrevidencia a su herramienta GenerarToolTip, lo que quiero hacer es cuando el usuario mueva su mouse a un punto de una barra, luego la "sugerencia" mostrará la información. de este bloque (una subtarea), necesito mostrar la descripción de cada subtarea.

Pongo mi ejemplo aquí, solo puedo mostrar la descripción de la última subtarea.

Por favor, dame un poco de ayuda si puedes. Gracias

Jiang

Prueba de clase pública {

class MyToolTipGenerator extends IntervalCategoryToolTipGenerator {

    DateFormat format;

    private MyToolTipGenerator(String value, DateFormat format) {
        super(value, format);
        this.format = format;
    }

    @Override
    public String generateToolTip(CategoryDataset cds, int row, int col) {

        final String s = super.generateToolTip(cds, row, col);
        TaskSeriesCollection tsc = (TaskSeriesCollection) cds;
        StringBuilder sb = new StringBuilder(s);
        String subTaskDes = null;

        // ArrayList<TaskSeries> ats=new ArrayList<>();
        // TaskSeries ts = new TaskSeries(s);

        int a = tsc.getSeriesCount();
        System.out.println(a + "________________");

        for (int i = 1; i < tsc.getSeriesCount(); i++) {
            TaskSeries ts = tsc.getSeries(i);
            Task task = ts.get(0);
            int count = task.getSubtaskCount();
            for (int j = 0; j < task.getSubtaskCount(); j++) {
                while (count-- != 0) {
                    subTaskDes = task.getSubtask(j).getDescription()
                            .toString();
                }
            }
            // for (int j = 0; j < tsc.getSubIntervalCount(row, col); j++) {
            // tsc.getSeries(0).getTasks().get(0).toString();
            // tsc.getSeries(key)
            // System.out.println(tsc.getSubIntervalCount(row, col));
            // tsc.getColumnKey(i).toString();
            // }
        }

        // System.out.println(ats.get(0).getDescription());

        for (int i = 0; i < tsc.getSubIntervalCount(row, col); i++) {
            sb.append(format.format(tsc.getStartValue(row, col, i)));
            sb.append("-");
            sb.append(format.format(tsc.getEndValue(row, col, i)));
            sb.append(",");
        }
        sb.deleteCharAt(sb.length() - 1);
        // return sb.toString();
        return subTaskDes;
    }
}

private JFreeChart createChart() {
    IntervalCategoryDataset xyDataset = createDataset();
    JFreeChart jFreeChart = ChartFactory.createGanttChart("Gantt", "time",
            "value", xyDataset, true, true, true);
    CategoryPlot plot = jFreeChart.getCategoryPlot();
    plot.getRenderer().setBaseToolTipGenerator(
            new MyToolTipGenerator("{0}, {1}: ", DateFormat
                    .getTimeInstance(DateFormat.SHORT)));
    return jFreeChart;
}

private IntervalCategoryDataset createDataset() {
    TaskSeriesCollection dataset = new TaskSeriesCollection();
    TaskSeries unavailable1 = new TaskSeries("Unavailable 1");
    TaskSeries unavailable2 = new TaskSeries("Unavailable 2");
    TaskSeries unavailable3 = new TaskSeries("Unavailable 3");
    Task t1 = new Task("Meeting Room 1", date(7), date(18));
    t1.addSubtask(new Task("Meeting 1", date(9), date(16)));
    unavailable1.add(t1);

    Task t2 = new Task("Meeting Room 2", date(8), date(18));
    t2.addSubtask(new Task("Meeting 4", date(10), date(11)));
    t2.addSubtask(new Task("Meeting 5", date(13), date(15)));
    t2.addSubtask(new Task("Meeting 6", date(16), date(18)));
    unavailable2.add(t2);

    Task t3 = new Task("Meeting Room 3", date(8), date(18));
    t2.addSubtask(new Task("Meeting 7", date(11), date(11)));
    t2.addSubtask(new Task("Meeting 8", date(13), date(15)));
    t2.addSubtask(new Task("Meeting 9", date(18), date(18)));
    unavailable3.add(t3);

    dataset.add(unavailable1);
    dataset.add(unavailable2);
    dataset.add(unavailable3);
    return dataset;
}

private Date date(int hour) {
    final Calendar calendar = Calendar.getInstance();
    calendar.set(2009, Calendar.DECEMBER, 1, hour, 0, 0);
    return calendar.getTime();
}

private void display() {
    JFrame f = new JFrame("Test");
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.add(new ChartPanel(createChart()));
    f.pack();
    f.setLocationRelativeTo(null);
    f.setVisible(true);
}

public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            new Test().display();
        }
    });
}

}enter code here

Respuestas a la pregunta(2)

Su respuesta a la pregunta