J2SE 1.4 Swing 組件可對特定事件播放聲音,模擬原生 OS 組件行為。預設關閉。Swing 採用可插拔外觀 (PLAF),組件從 UIManager 獲取顏色、字體等屬性。同理,聽覺提示屬性 AuditoryCues.playList 為事件名稱字串陣列,UIManager 映射到特定外觀的聲音文件。
三種預設播放列表鍵:
AuditoryCues.allAuditoryCues:所有聲音AuditoryCues.defaultCueList:僅四種 OptionPane 聲音(Metal 外觀專用)AuditoryCues.noAuditoryCues:無聲啟用所有聲音:
UIManager.put("AuditoryCues.playList",
UIManager.get("AuditoryCues.allAuditoryCues"));
替換特定聲音(如將「問題」聲音換為「錯誤」聲音):
UIManager.put("OptionPane.questionSound", "sounds/OptionPaneError.wav");
三個單選按鈕切換「預設」、「關閉」、「開啟」三種模式;兩按鈕觸發確認/訊息對話框測試聲音。代碼展示動態切換播放列表與替換聲音文件。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Audio extends JFrame {
public Audio() {
super("Auditory Popups");
setDefaultCloseOperation(EXIT_ON_CLOSE);
UIManager.put("AuditoryCues.playList", UIManager.get("AuditoryCues.defaultCueList"));
UIManager.put("OptionPane.questionSound", "sounds/OptionPaneError.wav");
// ... 建立 UI、單選按鈕動作監聽器切換播放列表 ...
// 確認對話框按鈕
confirmButton.addActionListener(e -> {
int result = JOptionPane.showConfirmDialog(Audio.this, "Confirm?");
JOptionPane.showMessageDialog(Audio.this, result==JOptionPane.YES_OPTION?"Confirmed":"Rejected");
});
// 訊息對話框按鈕
messageButton.addActionListener(e -> JOptionPane.showMessageDialog(Audio.this, "The Message"));
pack(); show();
}
public static void main(String[] args) { new Audio(); }
}
