国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
讓界面更加絢麗 Java SE 6.0四種新功能
上一篇中我介紹了Java SE 6在GUI上的部分改進(jìn)。在這篇文章中我接著介紹另外幾種新的GUI功能。這些功能是:

  ·帶有排序和過(guò)濾功能的JTable。

  ·增強(qiáng)的JTabbedPane組件

  ·增強(qiáng)的打印功能

  ·增強(qiáng)的拖放功能

  帶有排序和過(guò)濾功能的JTable

  在Java SE 6中除了java.awt被更新外,javax.swing同時(shí)也有了很大的改進(jìn)。在C/S程序中我們會(huì)經(jīng)常使用到"表"。如我們可以在查詢(xún)數(shù)據(jù)庫(kù)后將查詢(xún)結(jié)果顯示在表格中。在Java中顯示表格使用的是JTable類(lèi)。在以前的版本中,JTable只能簡(jiǎn)單地顯示數(shù)據(jù),并沒(méi)有什么附加的處理功能,而在Java SE 6中的JTable增加了排序和過(guò)濾功能。用戶可以單擊列頭進(jìn)行排序,也可以根據(jù)某一列來(lái)過(guò)濾表中的數(shù)據(jù)。

  為了使JTable可以對(duì)數(shù)據(jù)進(jìn)行,必須將RowSorter類(lèi)和JTable進(jìn)行關(guān)聯(lián)。RowSorter是一個(gè)抽象類(lèi),它負(fù)責(zé)將JTable中的數(shù)據(jù)映射成可排序的數(shù)據(jù)。在真正使用時(shí),我們將直接使用RowSorter的子類(lèi)TableRowSorter。下面的代碼顯示了如何將TableRowSorter類(lèi)和JTable相關(guān)聯(lián)。

TableModel model = new DefaultTableModel(rows, columns);
JTable table = new JTable(model);
RowSorter sorter = new TableRowSorter(model);
table.setRowSorter(sorter);

  上面代碼首先建立一個(gè)TableModel,然后將這個(gè)TableModel的實(shí)例同時(shí)傳遞給了JTable和RowSorter。下面是一個(gè)使用JTable排序的簡(jiǎn)單的例子。

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

public class TestSortedTable
{
 public static void main(String args[])
 {
  JFrame frame = new JFrame("JTable的排序測(cè)試");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  // 表格中顯示的數(shù)據(jù)
  Object rows[][] =
   {
   { "王明", "中國(guó)", 44 },
   { "姚明", "中國(guó)", 25 },
   { "趙子龍", "西蜀", 1234 },
   { "曹操", "北魏", 2112 },
   { "Bill Gates", "美國(guó)", 45 },
   { "Mike", "英國(guó)", 33 } };
  String columns[] =
   { "姓名", "國(guó)籍", "年齡" };
  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分別是按"姓名"進(jìn)行升序和降序排列的顯示結(jié)果。


圖1 按"姓名"升序顯示

圖2 按"姓名"降序顯示

  圖3顯示的是按"年齡"進(jìn)行降序排列。但我們發(fā)現(xiàn)一個(gè)奇怪的問(wèn)題,就是"年齡"字段并不是按數(shù)值類(lèi)型進(jìn)行排序的,而是按字符類(lèi)型進(jìn)行排序的。


圖3 按年齡降序顯示

  出現(xiàn)這種情況是因?yàn)樵谀J(rèn)情況下DefaultTableModal的列是Object類(lèi)型。而要想使JTable按數(shù)值進(jìn)行排序,必須要覆蓋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顯示了按"年齡"進(jìn)行排序的界面,看看,是不是按數(shù)值進(jìn)行排序了。


圖4 按數(shù)值類(lèi)型進(jìn)行排序

  下面讓我們來(lái)看看來(lái)何使用JTable進(jìn)行過(guò)濾。我們可以通過(guò)convertRowIndexToModel方法進(jìn)行過(guò)濾。下面的代碼加在一個(gè)按鈕中添加事件代碼調(diào)用JTable的過(guò)濾功能。

button.addActionListener(new ActionListener()
{
 public void actionPerformed(ActionEvent e)
 {
  String text = filterText.getText();
  if (text.length() == 0)
  {
   sorter.setRowFilter(null);
  }
  else
  {
   sorter.setRowFilter(RowFilter.regexFilter(text));
  }
 }
});

  上面的代碼并沒(méi)有調(diào)用convertRowIndextoModel()方法,如果調(diào)用它,你就可以在表中進(jìn)行相應(yīng)的操作。

  在JTable中通過(guò)抽象類(lèi)RowFilter類(lèi)對(duì)行進(jìn)行過(guò)濾。和排序不同,你可以不建立它們的子類(lèi),而使用這個(gè)抽象類(lèi)的6個(gè)靜態(tài)方法。

  ·andFilter
  ·dateFilter(RowFilter.ComparisonType type, Date date, int... indices)
  ·notFilter(RowFilter<M,I> filter)
  ·numberFilter(RowFilter.ComparisonType type, Number number, int... indices)
  ·orFilter
  ·regexFilter(String regex, int... indices)

  其中andFilter()、orFilter()以及notFilter()方法的功能是將當(dāng)前的過(guò)濾條件和其它的過(guò)濾條件進(jìn)行組合。如在同時(shí)比較日期和數(shù)值時(shí)需要將日期過(guò)濾和數(shù)值過(guò)濾進(jìn)行組合。這些組合是非常簡(jiǎn)單的。

  RowFilter的類(lèi)型比較允許你進(jìn)行4種關(guān)系的比較,等于、不等于、大于或小于。我們可以通過(guò)指定某一列進(jìn)行過(guò)濾,也可以對(duì)所有的列進(jìn)行過(guò)濾。這其中最為有趣的也許是正則表達(dá)式過(guò)濾(regular expression filter,或簡(jiǎn)稱(chēng)為regex filter)。使用這個(gè)過(guò)濾器可以對(duì)表中數(shù)據(jù)進(jìn)行更高級(jí)的過(guò)濾。下面是實(shí)現(xiàn)一個(gè)簡(jiǎn)單過(guò)濾器的代碼。

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

public class TestFilter
{
 public static void main(String args[])
 {
  JFrame frame = new JFrame("JTable的過(guò)濾測(cè)試");
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  Object rows[][] =
  {
   { "王明", "中國(guó)", 44 },
   { "姚明", "中國(guó)", 25 },
   { "趙子龍", "西蜀", 1234 },
   { "曹操", "北魏", 2112 },
   { "Bill Gates", "美國(guó)", 45 },
   { "Mike", "英國(guó)", 33 } };
  String columns[] =
   { "姓名", "國(guó)籍", "年齡" };
  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;
   }
  };
  final JTable table = new JTable(model);
  final TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
  table.setRowSorter(sorter);
  JScrollPane pane = new JScrollPane(table);
  frame.add(pane, BorderLayout.CENTER);
  JPanel panel = new JPanel(new BorderLayout());
  JLabel label = new JLabel("過(guò)濾");
  panel.add(label, BorderLayout.WEST);
  final JTextField filterText = new JTextField("");
  panel.add(filterText, BorderLayout.CENTER);
  frame.add(panel, BorderLayout.NORTH);
  JButton button = new JButton("過(guò)濾");
  button.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent e)
   {
    String text = filterText.getText();
    if (text.length() == 0)
    {
     sorter.setRowFilter(null);
    }
    else
    {
     sorter.setRowFilter(RowFilter.regexFilter(text));
    }
   }
  });
  frame.add(button, BorderLayout.SOUTH);
  frame.setSize(300, 250);
  frame.setVisible(true);
 }
}

  圖5是上面程序的運(yùn)行界面。


圖 5

·Java初學(xué)者專(zhuān)區(qū)  ·Java高級(jí)技術(shù)
·Java圖像與多媒體 ·Java網(wǎng)絡(luò)編程
·Eclipse ·Hibernate
·Spring ·Struts
·Java設(shè)計(jì)模式 ·EJB開(kāi)發(fā) 

  查看 Java  Java GUI  Java6 的全部文章


共4頁(yè)。 1 2 3 4 :
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
Jtable 排序,清空的問(wèn)題
IAdaptable和IAdaptableFactory
JTable
(總結(jié))Java圖形界面編程知識(shí)點(diǎn)匯總(待補(bǔ)充)
java swing控件,及布局的詳細(xì)使用
【原創(chuàng)】Swing雜記
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服