国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

讓界面更加絢麗 Java SE 6.0四種新功能

2019-11-18 15:29:56
字體:
來源:轉載
供稿:網友

  在上一篇中我介紹了java SE 6在GUI上的部分改進。在這篇文章中我接著介紹另外幾種新的GUI功能。這些功能是:

  ·帶有排序和過濾功能的JTable。

  ·增強的JTabbedPane組件

  ·增強的打印功能

  ·增強的拖放功能

  帶有排序和過濾功能的JTable

  在Java SE 6中除了java.awt被更新外,javax.swing同時也有了很大的改進。在C/S程序中我們會經常使用到"表"。如我們可以在查詢數據庫后將查詢結果顯示在表格中。在Java中顯示表格使用的是JTable類。在以前的版本中,JTable只能簡單地顯示數據,并沒有什么附加的處理功能,而在Java SE 6中的JTable增加了排序和過濾功能。用戶可以單擊列頭進行排序,也可以根據某一列來過濾表中的數據。

  為了使JTable可以對數據進行,必須將RowSorter類和JTable進行關聯。RowSorter是一個抽象類,它負責將JTable中的數據映射成可排序的數據。在真正使用時,我們將直接使用RowSorter的子類TableRowSorter。下面的代碼顯示了如何將TableRowSorter類和JTable相關聯。

TableModel model = new DefaultTableModel(rows, columns);
JTable table = new JTable(model);
RowSorter sorter = new TableRowSorter(model);
table.setRowSorter(sorter);
  上面代碼首先建立一個TableModel,然后將這個TableModel的實例同時傳遞給了JTable和RowSorter。下面是一個使用JTable排序的簡單的例子。

import javax.swing.*;
import javax.swing.table.*;
import java.awt.*;

public class TestSortedTable
{
 public static void main(String args[])
 {
  JFrame frame = new JFrame("JTable的排序測試");
  frame.setDefaultCloSEOperation(JFrame.EXIT_ON_CLOSE);
  // 表格中顯示的數據
  Object rows[][] =
   {
   { "王明", "中國", 44 },
   { "姚明", "中國", 25 },
   { "趙子龍", "西蜀", 1234 },
   { "曹操", "北魏", 2112 },
   { "Bill Gates", "美國", 45 },
   { "Mike", "英國", 33 } };
  String columns[] =
   { "姓名", "國籍", "年齡" };
  TableModel model = new DefaultTableModel(rows, columns);
  JTable table = new JTable(model);
  RowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
  table.setRowSorter(sorter);
  JScrollPane pane = new JScrollPane(table);
  frame.add(pane, BorderLayout.CENTER);
  frame.setSize(300, 150);
  frame.setVisible(true);
 }
}
  圖1和圖2分別是按"姓名"進行升序和降序排列的顯示結果。

讓界面更加絢麗 Java SE 6.0四種新功能(圖一)
圖1 按"姓名"升序顯示
讓界面更加絢麗 Java SE 6.0四種新功能(圖二)
圖2 按"姓名"降序顯示

  圖3顯示的是按"年齡"進行降序排列。但我們發現一個希奇的問題,就是"年齡"字段并不是按數值類型進行排序的,而是按字符類型進行排序的。

讓界面更加絢麗 Java SE 6.0四種新功能(圖三)
圖3 按年齡降序顯示

  出現這種情況是因為在默認情況下DefaultTableModal的列是Object類型。而要想使JTable按數值進行排序,必須要覆蓋DefaultTableModal的getColumnClass方法。

TableModel model = new DefaultTableModel(rows, columns)
{
 public Class getColumnClass(int column)
 {
  Class returnValue;
  if ((column >= 0) && (column < getColumnCount()))
  {
   returnValue = getValueAt(0, column).getClass();
  }
  else
  {
   returnValue = Object.class;
  }
  return returnValue;
 }
};
  圖4顯示了按"年齡"進行排序的界面,看看,是不是按數值進行排序了。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陕西省| 荆门市| 丰原市| 申扎县| 江达县| 西宁市| 深州市| 宁南县| 鹤山市| 兴业县| 信阳市| 友谊县| 织金县| 凤城市| 定结县| 敦煌市| 商河县| 梓潼县| 嘉荫县| 电白县| 黄梅县| 雷波县| 遂溪县| 岳西县| 云和县| 长垣县| 闵行区| 平定县| 阿鲁科尔沁旗| 张家川| 屏山县| 淮滨县| 府谷县| 资阳市| 白银市| 阳曲县| 克拉玛依市| 土默特右旗| 新安县| 祁门县| 曲麻莱县|