Buoy 是一個建構在 Swing 之上的免費使用者介面 (UI) 工具包,它為 UI 開發人員提供了便利性和簡單性。第一次嘗試用 Java 語言建構簡單的使用者介面時,我對 Swing 介面的複雜性感到有些驚訝。最近,一個朋友向我提到,他使用的渲染程式 Art of Illusion 基於一個不同的工具包:Buoy。推薦它的原因之一是它的介面更友好。
Buoy 是免費的,實際上它是公共領域的東西。它並沒有在某個開放程度合理的授權下發布,實際上它根本不受任何授權控制。這意味著在任何用 Java 語言編寫的能夠運行 Buoy 的專案中都可以使用 Buoy,而不用考慮授權問題。因為提供了完整的原始碼,所以這個工具包很容易修改和擴展。
程式生成了一些分形,具體地說,是迭代的分形。基本思想很簡單:在平面上定義一系列的線條區段,從 (0,0) 到 (1,0),圍繞任意一個單位線條定位。繪製這些區段之後,繪製同一套變形線條,用這個區段作為單位向量。

圖 1. 分形編輯器中的分形
在第一次深入研究程式碼時,也許會形成這樣的印象:把 Swing 程式碼轉換成 Buoy 程式碼簡單得就像把 UI 元素名稱中的字母 J 換成 B 一樣簡單。例如,FractalViewer 類別不再擴展 JFrame;它現在擴展的是 BFrame。主要的小部件名稱也可以照此推測得到。
| Swing | Buoy |
|---|---|
| JFrame | BFrame |
| JPanel | BPanel |
| JButton | BButton |
| JLabel | BLabel |
| BorderLayout | BorderContainer |
AWTWidget 包裝任意 AWT/Swing 元件。addEventLink() 連接事件源與處理器,程式碼極度簡潔。// 滑鼠按下事件連結
addEventLink("MousePressed", this, "mousePressed");
// 事件處理方法
public void mousePressed(MousePressedEvent ev) {
// 處理邏輯...
}
發行包中包含範例程式的原始碼、編譯好的類別檔和 Buoy 的 JAR 檔案。在 Windows 系統上,正確的命令列應當是 java -classpath .;Buoy.jar FractalViewer。