前面介紹了程序界面上一些簡單控件的組合排列,它們用來表達相互之間聯繫較弱的信息倒還湊合,要是用來表達關聯性較強的聚合信息就力不從心了。假若只是簡單信息的羅列,例如商品名稱列表、新聞標題列表、學生姓名列表等,尚可以使用列表框JList予以展現;假若要求羅列複雜的排列信息,例如商品訂單列表、新聞分類列表、學生成績列表等等,像這種存在多項細節的信息列表就沒法經過列表框表達,而應經過Swing的表格類型JTable加以描述。
JTable如其名字所言,它的面貌正是分行分列的表格,每行是一條完整的信息,而每列是信息的各項細節參數。與列表框相似,在構建表格控件以前,也得先初始化做爲信息載體的模型對象。同JTable搭檔的表格模型名叫DefaultTableModel,它包含的信息分紅兩部分,一部分是表格的標題信息,另外一部分是表格的內容信息,所以須要對錶格的標題數組和內容數組分別賦值,再據此構建包含這些信息的表格模型。具體的表格模型構建代碼示例以下:html
// 建立表格的標題數組 String[] heads = new String[]{"序號", "套餐名稱", "套餐價格"}; // 建立表格的內容數組 Object[][] values = new Object[][] { {"1", "魚香肉絲飯", "16"}, {"2", "香菇滑雞飯", "18"}, {"3", "黑椒牛排飯", "20"}, {"4", "梅菜扣肉飯", "17"}, {"5", "糖醋里脊飯", "19"}, {"6", "紅燒排骨飯", "17"}, {"7", "臺式滷肉飯", "15"}, }; // 根據內容數組和標題數組,建立默認的表格模型 DefaultTableModel model = new DefaultTableModel(values, heads);
有了表格模型,便可在JTable的構造方法中傳入模型對象,從而成功建立表格對象。表格對象的建立代碼以下所示:數組
JTable table = new JTable(model); // 根據模型建立表格
若要調整表格外觀,則可調用表格對象的下列方法來設置:
setFont:設置表格內容的文本字體。
setGridColor:設置網格線的顏色。
setShowGrid:是否顯示網格線。默認顯示。
setShowHorizontalLines:是否顯示水平的分隔線。默認顯示。
setShowVerticalLines:是否顯示垂直的分隔線。默認顯示。
setRowHeight:設置每行的高度。
setEnabled:是否容許編輯。默認容許。
setAutoResizeMode:設置自動調整大小的模式。如需展現水平滾動條,則要設置爲關閉自動調整。
以上方法主要針對表格內容的風格樣式,除此以外,尚有其它三類屬性要另外設置,包括:表格標題的屬性、表格內容的對齊方式、表格列的屬性。接下來分別展開簡要介紹。
一、表格標題的屬性
對於表格標題JTableHeader來講,須要先調用表格對象的getTableHeader方法得到標題對象,而後調用標題對象的下列方法調整標題屬性:
setFont:設置標題行的文本字體。
setResizingAllowed:是否容許經過拖動改變標題各列的寬度。默認容許。
setReorderingAllowed:是否容許經過拖動改變列與列之間的順序。默認容許。
下面是調整表格標題相關屬性的代碼例子:測試
JTableHeader header = table.getTableHeader(); // 得到表格的頭部(即標題行) header.setFont(font); // 設置標題行的文本字體 // 是否容許經過拖動改變標題各列的寬度。默認容許 header.setResizingAllowed(false); // 是否容許經過拖動改變列與列之間的順序。默認容許 header.setReorderingAllowed(false);
二、表格內容的對齊方式
對於表格內容的對齊方式來講,要先建立表格單元渲染器,並分別設置渲染器在水平與垂直兩個方向上的對齊方式,接着調用表格對象的setDefaultRenderer方法,才能完成表格內容的對齊操做。對應的設置代碼以下所示:字體
// 建立默認的表格單元渲染器 DefaultTableCellRenderer render = new DefaultTableCellRenderer(); // 設置渲染器在水平方向的對齊方式。默認靠左對齊 render.setHorizontalAlignment(JLabel.CENTER); // 設置渲染器在垂直方向的對齊方式。默認垂直居中 render.setVerticalAlignment(JLabel.CENTER); // 設置表格的默認渲染器 table.setDefaultRenderer(Object.class, render);
三、表格列的屬性
對於表格列的屬性來講,須要先調用表格對象的getColumnModel方法得到表格的列模型,以後遍歷各列的模型對象,分別設置每列的屬性值,好比調用setPreferredWidth方法設置當前列的推薦寬度等等。下面即是調整每列寬度的代碼例子:spa
// 得到表格的列模型 TableColumnModel columnModel = table.getColumnModel(); for (int i=0; i<columnModel.getColumnCount(); i++) { // 遍歷各列模型 // 獲取指定位置的列對象 TableColumn column = columnModel.getColumn(i); // 設置該列的推薦寬度。只有在關閉自動調整的模式之下,設置每列的寬度纔會生效 column.setPreferredWidth(100); }
另外注意,JTable不會自動顯示滾動條,若要在表格內容超出範圍時呈現滾動條,則需像JTextArea那樣建立一個JScrollPane對象來綁定表格對象。默認狀況只展現垂直滾動條,若想同時展現水平滾動條,則需關閉表格的自動調整機制,也就是調用表格對象的setAutoResizeMode方法將模式修改成AUTO_RESIZE_OFF。爲表格對象添加滾動條的關鍵代碼以下所示:htm
// 設置自動調整大小的模式。如需展現水平滾動條,則要設置爲關閉自動調整 table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); // 第一種綁定方式:建立一個滾動條,在構造方法中填入表格對象 JScrollPane scroll = new JScrollPane(table); // 第二種綁定方式:調用setViewportView方法設置滾動條關聯的控件 //scroll.setViewportView(table); // 第三種綁定方式:經過滾動條對象的視圖口岸的add方法添加表格對象 //scroll.getViewport().add(table); frame.getContentPane().add(scroll); // 在窗口的內容面板上添加包含表格的滾動條
把上述的幾處表格調用代碼合併到一塊兒,運行合併後的測試代碼,區分程序窗口可否裝得下整個表格的兩種狀況,彈出的窗口界面將出現對應的兩種效果。其中下面第一張圖屬於窗口不夠大的狀況,此時表格右側出現了垂直滾動條;而第二張圖屬於窗口足夠大的狀況,此時界面展現了完整的表格內容,並未出現多餘的滾動條。對象
更多Java技術文章參見《Java開發筆記(序)章節目錄》blog