欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

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

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

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

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

  ·增強的JTabbedPane組件

  ·增強的打印功能

  ·增強的拖放功能

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

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

  為了使JTable可以對數據進(jìn)行,必須將RowSorter類(lèi)和JTable進(jìn)行關(guān)聯(lián)。RowSorter是一個(gè)抽象類(lèi),它負責將JTable中的數據映射成可排序的數據。在真正使用時(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的排序測試");
  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分別是按"姓名"進(jìn)行升序和降序排列的顯示結果。


圖1 按"姓名"升序顯示

圖2 按"姓名"降序顯示

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


圖3 按年齡降序顯示

  出現這種情況是因為在默認情況下DefaultTableModal的列是Object類(lèi)型。而要想使JTable按數值進(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)行排序的界面,看看,是不是按數值進(jìn)行排序了。


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

  下面讓我們來(lái)看看來(lái)何使用JTable進(jìn)行過(guò)濾。我們可以通過(guò)convertRowIndexToModel方法進(jìn)行過(guò)濾。下面的代碼加在一個(gè)按鈕中添加事件代碼調用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)有調用convertRowIndextoModel()方法,如果調用它,你就可以在表中進(jìn)行相應的操作。

  在JTable中通過(guò)抽象類(lèi)RowFilter類(lèi)對行進(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()方法的功能是將當前的過(guò)濾條件和其它的過(guò)濾條件進(jìn)行組合。如在同時(shí)比較日期和數值時(shí)需要將日期過(guò)濾和數值過(guò)濾進(jìn)行組合。這些組合是非常簡(jiǎn)單的。

  RowFilter的類(lèi)型比較允許你進(jìn)行4種關(guān)系的比較,等于、不等于、大于或小于。我們可以通過(guò)指定某一列進(jìn)行過(guò)濾,也可以對所有的列進(jìn)行過(guò)濾。這其中最為有趣的也許是正則表達式過(guò)濾(regular expression filter,或簡(jiǎn)稱(chēng)為regex filter)。使用這個(gè)過(guò)濾器可以對表中數據進(jìn)行更高級的過(guò)濾。下面是實(shí)現一個(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ò)濾測試");
  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)
  {
   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是上面程序的運行界面。


圖 5

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

  查看 Java  Java GUI  Java6 的全部文章


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

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久