Swing Timer和性能不佳(Java,Swing)

时间:2017-05-07 02:59:56

标签: java swing

我对 Swing Timer 有疑问。我正在尝试为按下按钮时从侧面滑入的 JPanel 创建“滑动”动画。这实际上工作正常,但是当我想让它再次滑出时,我的表现极差。注意:JPanel位于 JLayeredPane 中,其下还有其他组件(这一点很重要)。

以下是幻灯片的代码:

int boundsTo = GlobalValue.getLargeInformationBarWidth();
        final int[] boundsNow = {0};
        inSlideTimer = new Timer(1, ae -> {
            if (boundsTo > boundsNow[0]){
                boundsNow[0] = boundsNow[0] + 3;
                JourneyPlannerBarController.getInstance().getInformationBar().setBounds(0, 0, boundsNow[0], window.getFrame().getHeight());
                JourneyPlannerBarController.getInstance().getInformationBar().revalidate();
                JourneyPlannerBarController.getInstance().getInformationBar().repaint();
            } else {
                inSlideTimer.stop();
                inSlideTimer = null;
            }
        });
        inSlideTimer.start();
        JourneyPlannerBarController.getInstance().setupLargeJourneyPlannerBar();
}

以下是幻灯片的代码:

int boundsTo = 0;
final int[] boundsNow = {GlobalValue.getLargeInformationBarWidth()};
inSlideTimer = new Timer(1, ae -> {
        if (boundsTo <= boundsNow[0]) {
            boundsNow[0] = boundsNow[0] - 3;
            JourneyPlannerBarController.getInstance().getInformationBar().setBounds(0, 0, boundsNow[0], window.getFrame().getHeight());
            JourneyPlannerBarController.getInstance().getInformationBar().revalidate();
            JourneyPlannerBarController.getInstance().getInformationBar().repaint();

        } else {
            inSlideTimer.stop();
            inSlideTimer = null;
            JourneyPlannerBarController.getInstance().clearJourneyPlannerBar();
            CanvasController.repaintCanvas();
        }
});
inSlideTimer.start();
}

可以看出,两个代码块几乎完全相同,但性能差异确实很大。我一直试图阅读SwingWorker,EDT等等,但到目前为止我还没有找到任何可以帮助我的东西。

0 个答案:

没有答案