Индикатор выполнения для макета JGraphX

Можно ли использовать индикатор выполнения с mxIGraphLayout? У меня есть график, макет которого занимает нетривиальное время, и я хотел бы, чтобы пользователь мог видеть, что да, что-то происходит.

В идеале я хотел бы что-то, что я мог бы интерпретировать (хотя бы грубо) как процент выполнения, но, похоже, даже нет способа добавить какие-либо слушатели, которые вызываются во время макета.

Если это имеет значение, я использую mxOrganicLayout, но в будущем могу измениться.


person Troy Daniels    schedule 07.11.2013    source источник


Ответы (1)


Этого можно добиться, расширив mxOrganicLayout и переопределив следующие методы.

    @Override
    public void execute(Object cell)
    {
        progress.setProgress(0);
        try
        {
            super.execute(cell);
        }
        finally
        {
            progress.setProgress(maxIterations);
        }

    }

    @Override
    protected void performRound()
    {
        progress.setNote("Iteration " + iteration);
        progress.setProgress(iteration);
        super.performRound();
    }

    final ProgressMonitor progress;

Очевидно, вам также нужно установить progress в какой-то момент. execute уведомляет монитор выполнения о том, что выполнение началось, и закрывает его, когда оно завершено.

performRound вызывается для выполнения фактических обновлений, поэтому увеличение прогресса приведет к перемещению индикатора выполнения.

person Troy Daniels    schedule 19.11.2013