Java開發筆記(一百三十二)Swing的表格

前面介紹了程序界面上一些簡單控件的組合排列,它們用來表達相互之間聯繫較弱的信息倒還湊合,要是用來表達關聯性較強的聚合信息就力不從心了。假若只是簡單信息的羅列,例如商品名稱列表、新聞標題列表、學生姓名列表等,尚可以使用列表框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

相關文章
相關標籤/搜索