Java/JDK 6/JTable Sort Filter

Материал из Java эксперт
Перейти к: навигация, поиск

Filter table by the text in a TextField

   <source lang="java">

import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.RowFilter; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; public class RegexTable {

 public static void main(String args[]) {
   JFrame frame = new JFrame("Regexing JTable");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   Object rows[][] = { { "A", "About", 44.36 }, { "B", "Boy", 44.84 }, { "C", "Cat", 463.63 },
       { "D", "Day", 27.14 }, { "E", "Eat", 44.57 }, { "F", "Fail", 23.15 },
       { "G", "Good", 4.40 }, { "H", "Hot", 24.96 }, { "I", "Ivey", 5.45 },
       { "J", "Jack", 49.54 }, { "K", "Kids", 280.00 } };
   String columns[] = { "Symbol", "Name", "Price" };
   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("Filter");
   panel.add(label, BorderLayout.WEST);
   final JTextField filterText = new JTextField("A");
   panel.add(filterText, BorderLayout.CENTER);
   frame.add(panel, BorderLayout.NORTH);
   JButton button = new JButton("Filter");
   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);
 }

}

       </source>
   
  
 
  



JTable Filtering

   <source lang="java">

import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.RowFilter; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; public class JTableFilterDemo {

 public static void main(String[] args) {
   Object[][] data = { { "A", 5 }, { "B", 2 }, { "C", 4 }, { "D", 8 } };
   String columnNames[] = { "Item", "Value" };
   TableModel model = new DefaultTableModel(data, columnNames) {
     public Class<?> getColumnClass(int column) {
       return getValueAt(0, column).getClass();
     }
   };
   JTable table = new JTable(model);
   RowFilter<Object, Object> filter = new RowFilter<Object, Object>() {
     public boolean include(Entry entry) {
       Integer population = (Integer) entry.getValue(1);
       return population.intValue() > 3;
     }
   };
   TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
   sorter.setRowFilter(filter);
   table.setRowSorter(sorter);
   JScrollPane scrollPane = new JScrollPane(table);
   JFrame frame = new JFrame("Filtering Table");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.add(scrollPane);
   frame.setSize(300, 200);
   frame.setVisible(true);
 }

}

       </source>
   
  
 
  



JTable Sorting

   <source lang="java">

import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; public class JTableSortDemo {

 public static void main(String[] args) {
   Object[][] data = { { "A", 5 }, { "B", 2 }, { "C", 4 }, { "D", 8 } };
   String columnNames[] = { "Item", "Value" };
   TableModel model = new DefaultTableModel(data, columnNames) {
     public Class<?> getColumnClass(int column) {
       return getValueAt(0, column).getClass();
     }
   };
   JTable table = new JTable(model);
   TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(model);
   table.setRowSorter(sorter);
   JScrollPane scrollPane = new JScrollPane(table);
   JFrame frame = new JFrame("Sorting Table");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   frame.add(scrollPane);
   frame.setSize(300, 200);
   frame.setVisible(true);
 }

}

       </source>
   
  
 
  



Print a JTable out

   <source lang="java">

import javax.swing.JTable; import javax.swing.SwingUtilities; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JMenuBar; import javax.swing.JScrollPane; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.print.PrinterException; public class PrintTable {

 public static void main(String[] args) throws Exception {
   String[] columns = { "Name", "Age" };
   Object[][] content = { { "R", new Integer(24) }, { "A", new Integer(25) },
       { "J", new Integer(30) }, { "A", new Integer(32) }, { "S", new Integer(27) } };
   JTable table = new JTable(content, columns);
   JFrame frame = new JFrame();
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   JPanel jPanel = new JPanel(new GridLayout(2, 0));
   jPanel.setOpaque(true);
   table.setPreferredScrollableViewportSize(new Dimension(500, 70));
   jPanel.add(new JScrollPane(table));
   /* Add the panel to the JFrame */
   frame.add(jPanel);
   /* Display the JFrame window */
   frame.pack();
   frame.setVisible(true);
   table.print();
 }

}

       </source>
   
  
 
  



Using RowSorter to sort a JTable

   <source lang="java">

import java.awt.BorderLayout; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.RowSorter; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableModel; import javax.swing.table.TableRowSorter; public class RowSorterDemo {

 public static void main(String args[]) {
   JFrame frame = new JFrame("Sort Table Demo");
   frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
   Object rows[][] = { { "J", 23 }, { "R", 24, }, { "E", 21, }, { "B", 27, }, { "A", 25, },
       { "S", 22, }, };
   /* Specify column names */
   String columns[] = { "Name", "Age" };
   /* Create a TableModel */
   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;
     }
   };
   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);
 }

}

       </source>