傳統應用在狀態切換(表單→結果、相簿翻頁、購物車更新)時直接替換 UI,用戶需重新掃描介面。動畫轉換在狀態間建立邏輯連續性,引導視覺焦點,降低認知負擔。
// 庫核心類別
public class ScreenTransition {
public ScreenTransition(JComponent transitionContainer,
TransitionTarget target,
Animator animator);
public void start(); // 啟動轉換
}
public interface TransitionTarget {
void setupNextScreen(); // 建構目標 UI 狀態
}
FieldsOfText 應用:初始一個文字欄位,點擊 More/Less 增減欄位,提交按鈕隨之移動。


// 建構 Animator:500ms,緩入緩出
Animator animator = new Animator(500);
animator.setAcceleration(0.2f);
animator.setDeceleration(0.2f);
// 建構 ScreenTransition
ScreenTransition transition = new ScreenTransition(this, this, animator);
// 按鈕事件觸發
public void actionPerformed(ActionEvent ae) {
boolean changed = false;
if (ae.getSource() == moreButton && numFields < MAX_FIELDS) {
numFields++; changed = true;
} else if (ae.getSource() == lessButton && numFields > 1) {
numFields--; changed = true;
}
if (changed) transition.start();
}
// 實作 TransitionTarget:重建目標 UI
public void setupNextScreen() {
removeAll(); // 清空舊 UI
add(moreOrLess);
for (int i = 0; i < numFields; i++) add(textFields[i]);
add(submitPanel);
revalidate(); repaint();
}
關鍵約定:共享同一元件實例(如提交按鈕)以獲得移動動畫,否則視為消失+出現。
內建效果可擴充。實作 TransitionEffect 介面,覆寫 setup()、cleanup()、paint(),註冊至系統:
// 範例:元件滑出/滑入、縮放消失等
ScreenTransition.registerEffect(component, TransitionType.DISAPPEAR, new SlideOutEffect());
詳細實作參考《Filthy Rich Clients》第 18 章。
Acceleration/Deceleration)提升真實感動畫轉換庫將複雜的動畫協調邏輯封裝為 ScreenTransition + TransitionTarget 簡單契約,開發者專注於「目標 UI 長什麼樣」,庫自動處理「如何平滑過渡」。立即嘗試為您的 Swing 應用注入生動體驗!