文章作者 100test 发表时间 2007:03:14 16:46:39
来源 100Test.Com百考试题网
TableModel model = new DefaultTableModel(rows, columns). JTable table = new JTable(model). RowSorter sorter = new TableRowSorter(model). table.setRowSorter(sorter). |
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 table.setRowSorter(sorter). JScrollPane pane = new JScrollPane(table). frame.add(pane, BorderLayout.CENTER). frame.setSize(300, 150). frame.setVisible(true). } } |
图1 按"姓名"升序显示 图2 按"姓名"降序显示 |
图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 按数值类型进行排序 |
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)). } } }). |
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的过滤测试"). 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 table.setRowSorter(sorter). JScrollPane pane = new JScrollPane(table). frame.add(pane, BorderLayout.CENTER). JPanel panel = new JPanel(new BorderLayout()). JLabel label = new JLabel("过滤"). panel.add(label, BorderLayout.WEST). final JTextField filterText = new JTextField(""). panel.add(filterText, BorderLayout.CENTER). frame.add(panel, BorderLayout.NORTH). JButton button = new JButton("过滤"). 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 |
增强的JTabbedPane组件
JTabbedPane组件为我们提供了一种非常好的方法在窗体上显示很多的控件。我们可以将不同类别的控件放到不同的Tab页上,然后通过需要点击相应的Tab页。在传统的Tab页上只能防止文本的图标。而在Java SE 6中使我们可以直接将控件放到Tab上。我们可以通过setTabComponentAt方法将控件放到Tab上。这个方法有两个参数,一个是Tab的索引,另一个是要放置的对象。
JTabbedPane pane = new JTabbedPane(). pane.setTabComponentAt(1, component). |
import javax.swing.*. import javax.swing.table.*. import java.awt.*. import java.awt.event.*. public class TestTabbedPane { static void addIt(JTabbedPane tabbedPane, String text) { JLabel label = new JLabel(text). JButton button = new JButton(text). JPanel panel = new JPanel(). panel.add(label). panel.add(button). tabbedPane.addTab(text, panel). if(text.equals("tab4")) tabbedPane.setTabComponentAt(tabbedPane.getTabCount() - 1, new JTextField("插入了文本控件")). else tabbedPane.setTabComponentAt(tabbedPane.getTabCount() - 1,button). } public static void main(String args[]) { JFrame f = new JFrame("JTabbedPane演示"). f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE). JTabbedPane tabbedPane = new JTabbedPane(). addIt(tabbedPane, "tab1"). addIt(tabbedPane, "tab2"). addIt(tabbedPane, "tab3"). addIt(tabbedPane, "tab4"). addIt(tabbedPane, "tab5"). f.add(tabbedPane, BorderLayout.CENTER). f.setSize(400, 200). f.setVisible(true). } } |
相关文章
JavaSE6WebService之旅
JavaSE6调用Java编译器的两种新方法
让界面更加绚丽JavaSE6.0四种新功能
好处不止一点点编程结构--闭包
OJB中的多条件查询
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛