⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filterablesortabletablepanel.java.svn-base

📁 java 表格排序
💻 SVN-BASE
字号:
/*
 * FilterableSortableTablePanel.java
 *
 * @author alan.dodson
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

package au.id.dodson.FilterableSortableTable;

import java.awt.BorderLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;
import java.util.Vector;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;

/**
 * @author Alan Dodson
 * @version 1.0
 */

public class FilterableSortableTablePanel extends JPanel {
    private JLabel filterLabel = null;
    private JTextField filterField = new JTextField(20);
    private JPanel filterPanel = null;
    private JPanel scrollTablePanel = null;
    private FilterSortTable filterTable = new FilterSortTable();
    private JLabel infoLabel = new JLabel(" ");
    
    private final static String version = "1.0";
    
    /**
     *
     * @param model
     */
    public FilterableSortableTablePanel(TableModel model) {
        setLayout(new BorderLayout());
        add(infoLabel,BorderLayout.NORTH);
        add(getScrollTablePanel(),BorderLayout.CENTER);
        add(getFilterPanel(),BorderLayout.SOUTH);
        getTable().setTableModel(model);
    }
    
    private JPanel getScrollTablePanel() {
        scrollTablePanel = new JPanel(new BorderLayout());
        JScrollPane scrollPane = new JScrollPane(filterTable);
        scrollTablePanel.add(scrollPane);
        
        return scrollTablePanel;
    }
    
    private JPanel getFilterPanel() {
        filterPanel = new JPanel(new BorderLayout());
        
        filterLabel = new JLabel();
        filterLabel.setText("Filter Data ");
        
        filterField.addKeyListener(new KeyAdapter() {
            public void keyReleased(KeyEvent e) {
                setFilter(filterField.getText());
            }
        });
        
        Vector vy = new Vector();
        Vector vx = new Vector();
        vy.add(vx);
        
        vx.add(filterLabel);
        vx.add(filterField);
        
        filterPanel.add(GridBagUtils.layoutInGrid(vy));
        
        return filterPanel;
    }
    
    /**
     *
     * @return
     */
    public Vector getSelectedRow() {
        int selectedRow = getTable().getSelectedRow();
        if (selectedRow >=0) {
            return getTable().getRow(selectedRow);
        } else {
            return null;
        }
    }
    
    /**
     *
     * @param text
     */
    public void setFilter(String text) {
        filterField.setText(text);
        filterTable.setTableFilter(filterField.getText().toString().trim());
        setInfoText(filterTable.getRowCount() + " Rows Found");
    }
    
    /**
     *
     * @return
     */
    public FilterSortTable getTable() {
        return filterTable;
    }
    
    /**
     *
     * @param text
     */
    public void setInfoText(String text) {
        infoLabel.setText(text);
    }
    
    /**
     *
     * @param enable
     */
    public void setEnabled(boolean enable) {
        super.setEnabled(enable);
        filterLabel.setEnabled(enable);
        filterField.setEnabled(enable);
        filterPanel.setEnabled(enable);
        scrollTablePanel.setEnabled(enable);
        filterTable.setEnabled(enable);
        infoLabel.setEnabled(enable);
    }
    
    /**
     *
     * @param args
     */
    public static void main(String args[]) {
        final JFrame window = new JFrame();
        Vector columnNames = new Vector();
        Random rand = new Random();
        Vector iv = new Vector();
        for (int i = 0; i<6; i++) {
            Vector jv = new Vector();
            columnNames.add("Col " + i);
            for (int j = 0; j<6; j++) {
                String s = "Value " + rand.nextInt(10) + " " + rand.nextInt(10);
                jv.add(s);
            }
            iv.add(jv);
        }
        final DefaultTableModel model = new DefaultTableModel(iv,columnNames) {
            public boolean isCellEditable(int r, int c) {
                return false;
            }
        };
        final FilterableSortableTablePanel panel = new FilterableSortableTablePanel(model);
        panel.getTable().addTableListener(new TableListenerInterface() {
            public void setRowAccepted(Vector isAccepted) {
                String text = "";
                for (int i=0; i<isAccepted.size(); i++) {
                    text += "Column " + panel.getTable().getColumnName(i) + " " + isAccepted.get(i) + "\n";
                }
                JOptionPane.showMessageDialog(window, "Selected row \n" + text);
            }
        });
        window.getContentPane().add(panel);
        window.setTitle("FilterableSortableTable");
        window.pack();
        window.setVisible(true);
                                
        window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -