淺談Swing中的渲染器接口
Swing的API具有很強的靈活性和可擴展性,比如標準復合數據型組件一般不需要進行渲染器擴展,就可以實現許多應用,但是當遇到需要自定義擴展的需求時,Swing的高度抽象靈活的MVC框架也可以優雅從容的完成。Swing的這一特色典型的體現在其渲染器擴展思想上。那么如何使用渲染器呢?如何自定義渲染器來擴展組件呢?如何將渲染器思想應用到自定義組件上呢?
復合數據類型的組件如JTable、JTree、JList以及JComboBox都定義適合自己類型的渲染器接口,它們與渲染器接口之間的映射關系如下表所示:
組件 渲染器
JTable TableCellRenderer
JTree TreeCellRenderer
JList ListCellRenderer
JComboBox ListCellRenderer
TableCellRenderer接口定義了JTable渲染器接口:
- public interface TableCellRenderer {
- Component getTableCellRendererComponent(JTable table, Object value,
- boolean isSelected, boolean hasFocus,
- int row, int column);
- }
TreeCellRenderer定義了JTree的渲染器接口。
- public interface TreeCellRenderer {
- Component getTreeCellRendererComponent(JTree tree, Object value,
- boolean selected, boolean expanded,
- boolean leaf, int row, boolean hasFocus);
- }
ListCellRenderer是JList、JComboBox的渲染器接口。
- public interface ListCellRenderer
- {
- Component getListCellRendererComponent(
- JList list,
- Object value,
- int index,
- boolean isSelected,
- boolean cellHasFocus);
- }
其實,渲染器不僅僅可以用在標準組件JTable、JList、JTree和JComboBox,也可以在自己定制的組件中使用渲染器的思想實現復雜的界面,比如UML圖、工作流圖、電路圖,模擬JTable實現類似于MS Excel的電子表格控件,甚至可以實現自己的用戶界面設計工具。前面文章中曾經提到過的數據庫設計插件和報表設計插件就是根據渲染器原理自定義出的組件。
因此,熟悉了Swing的結構尤其是渲染器的思想,加上一些額外的知識,比如double buffering、glass pane、robot、swing threading、color model、java2d等等,可以做出許多事情來。人有多大膽,地有多大產。但深入學習和了解Swing的基本結構,這是前提。今天的文章主要是以實例演示了這些渲染器的應用,文中的例子只是演示作用,加深你對渲染器的印象。但是真正吃透渲染器的各種技術,還需要自己深入的學習和實踐。
【編輯推薦】