Плавная анимация в Swing - PullRequest
1 голос
/ 15 июля 2011

Как анимировать JPanel с максимальной частотой обновления монитора клиента?

Я бы хотел, чтобы paintComponent вызывался только после последнего обновления. Я мог бы сделать это, используя Timer для планирования repaint() каждые (1000/60) мс, но я просто догадываюсь, какова частота обновления.

По сути, я бы хотел, чтобы repaint вызывали непрерывно. Но если я вызываю repaint 200 раз в секунду и EDT не занят, он выполняется paintComponent 200 раз в секунду, что является неэффективным использованием процессорного времени и может отрицательно повлиять на остальную производительность приложения.

Ответы [ 2 ]

2 голосов
/ 15 июля 2011

Я не уверен, что перекраска с частотой обновления монитора - это хорошая идея.Но если вы хотите узнать, какова частота обновления, вы можете использовать этот фрагмент кода (бесстыдно скопированный из сети).

GraphicsEnvironment ge = GraphicsEnvironment
        .getLocalGraphicsEnvironment();
GraphicsDevice[] gs = ge.getScreenDevices();

for (int i = 0; i < gs.length; i++) {
    DisplayMode dm = gs[i].getDisplayMode();

    // Get refresh rate in Hz
    int refreshRate = dm.getRefreshRate();
    if (refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) {
        // Unknown rate
    } else {
        System.out.println(refreshRate);
    }
}
1 голос
/ 15 июля 2011

Я согласен с @little bunny foo foo, и вы также должны рассчитать с задержкой ОС, это значение зависит от HW & SW, тогда мой WinXp имеет значение около 63 мс, при разгоне этой частоты вы получаете ошибку из RepaintManager, например JTableJComponents очень чувствителен, пожалуйста, прочитайте больше о рисовании в Swing paintImmediately () , repaint () создать EDT с помощью defalut

EDIT: рассеять все возможные сомнения относительно repaint ();смотрите здесь живопись и javax.swing.Timer

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...