package org.fanhongtao.tools.tagviewer; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.FlowLayout; import java.io.FileInputStream; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.List; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.table.AbstractTableModel; import org.fanhongtao.swing.BaseFrame; import org.fanhongtao.tools.tagviewer.bean.GroupBean; import org.fanhongtao.tools.tagviewer.bean.RootBean; import org.fanhongtao.tools.tagviewer.bean.TagBean; import org.fanhongtao.tools.tagviewer.bean.TitleBean; import org.fanhongtao.xml.DigesterUtils; /** * @author Fan Hongtao <fanhongtao@gmail.com> * @created 2011-11-20 */ public class TagViewer extends BaseFrame { @Override protected void createContents(JFrame frame) { // Load configuration file RootBean rootBean = new RootBean(); try { // InputStream input = rootBean.getClass().getResourceAsStream("tagviewer.xml"); InputStream input = new FileInputStream("res/tagviewer.xml"); URL url = rootBean.getClass().getResource("tagviewer_rules.xml"); rootBean = (RootBean)DigesterUtils.parse(rootBean, input, url); } catch (Exception e) { e.printStackTrace(); } // Create Tabbed pane JTabbedPane tabbedPane = new JTabbedPane(); List<GroupBean> groupList = rootBean.getGroupList(); for (GroupBean group : groupList) { JComponent panel = makeGroupPanel(group); tabbedPane.addTab(group.getName(), panel); } frame.add(tabbedPane); // Maxmize window frame.setSize(new Dimension(800, 600)); frame.setExtendedState(frame.getExtendedState() | JFrame.MAXIMIZED_BOTH); } protected JComponent makeGroupPanel(GroupBean group) { JPanel panel = new JPanel(false); panel.setLayout(new BorderLayout()); final MyTableModel tableModel = new MyTableModel(group); JTable table = new JTable(tableModel); JScrollPane scrollPane = new JScrollPane(table); panel.add(scrollPane, BorderLayout.CENTER); JPanel filterPanel = new JPanel(false); filterPanel.setLayout(new FlowLayout(FlowLayout.RIGHT)); filterPanel.add(new JLabel("Filter")); final JTextField filterText = new JTextField(40); filterText.getDocument().addDocumentListener(new DocumentListener() { @Override public void removeUpdate(DocumentEvent e) { tableModel.filter(filterText.getText()); } @Override public void insertUpdate(DocumentEvent e) { tableModel.filter(filterText.getText()); } @Override public void changedUpdate(DocumentEvent e) { tableModel.filter(filterText.getText()); } }); filterPanel.add(filterText); panel.add(filterPanel, BorderLayout.NORTH); return panel; } class MyTableModel extends AbstractTableModel { private static final long serialVersionUID = 1L; private GroupBean group; private List<TagBean> filtedTagList; public MyTableModel(GroupBean group) { super(); this.group = group; this.filtedTagList = group.getTagList(); } public void filter(String filter) { filtedTagList = new ArrayList<TagBean>(); filter = filter.toLowerCase(); for (TagBean tag : group.getTagList()) { if (tag.getName().toLowerCase().contains(filter) || tag.getValue().toLowerCase().contains(filter)) { filtedTagList.add(tag); } } fireTableDataChanged(); } @Override public int getRowCount() { return filtedTagList.size(); } @Override public int getColumnCount() { return 2; } @Override public Object getValueAt(int rowIndex, int columnIndex) { TagBean tag = filtedTagList.get(rowIndex); if (tag == null) { return null; } switch (columnIndex) { case 0: return tag.getName(); case 1: return tag.getValue(); default: return null; } } @Override public String getColumnName(int column) { TitleBean title = group.getTitle(); switch (column) { case 0: return title.getColumnName(); case 1: return title.getColumnValue(); default: return null; } } } public static void main(String[] args) { new TagViewer().run("Tag Viewer"); } }