Guest User

Untitled

a guest
Aug 19th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.93 KB | None | 0 0
  1. import java.awt.Color;
  2. import java.awt.Component;
  3. import java.awt.Graphics;
  4. import java.awt.Rectangle;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7.  
  8. import javax.swing.DefaultRowSorter;
  9. import javax.swing.JFrame;
  10. import javax.swing.JPanel;
  11. import javax.swing.JScrollPane;
  12. import javax.swing.JTable;
  13. import javax.swing.UIManager;
  14. import javax.swing.table.DefaultTableCellRenderer;
  15.  
  16. import net.miginfocom.swing.MigLayout;
  17.  
  18. import org.jdesktop.swingx.JXSearchField;
  19. import org.jdesktop.swingx.JXTable;
  20. import org.jdesktop.swingx.sort.RowFilters;
  21.  
  22.  
  23. public class TableFilterHilite {
  24. public static void main(String[] args) throws Exception {
  25. UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
  26. Object[][] data = new Object[][]{
  27. {"lorem", "ipsum", "dolor"},
  28. {"foo", "bar", "baz"},
  29. {"java", "scala", "clojure"},
  30. {"python", "ruby", "php"}
  31. };
  32. final JFrame f = new JFrame("test");
  33. f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  34. f.setSize(400,400);
  35. f.setLocationRelativeTo(null);
  36.  
  37. final JPanel content = new JPanel(new MigLayout("fill",
  38. "[grow,:200:,fill]", "[][grow,fill]"));
  39. f.setContentPane(content);
  40.  
  41. final JXTable tbl = new JXTable(data, new Object[] {"a", "b", "c"});
  42. final JXSearchField search = new JXSearchField();
  43.  
  44. content.add(search, "wrap");
  45. content.add(new JScrollPane(tbl));
  46.  
  47. search.addActionListener(new ActionListener() {
  48. @Override public void actionPerformed(ActionEvent e) {
  49. String filter = search.getText().trim();
  50. DefaultRowSorter rs = (DefaultRowSorter)tbl.getRowSorter();
  51. rs.setRowFilter(filter.length() > 0 ?
  52. RowFilters.regexFilter(".*?"+filter+".*?", 0, 1, 2) : null);
  53. }
  54. });
  55.  
  56. final Color fgSel = tbl.getSelectionForeground();
  57. final Color bgSel = tbl.getSelectionBackground();
  58. tbl.setDefaultRenderer(Object.class, new DefaultTableCellRenderer() {
  59. private boolean selected;
  60. @Override public void paint(Graphics g) {
  61. super.paint(g);
  62.  
  63. String filter = search.getText().trim();
  64. if (filter.length() == 0) {
  65. return;
  66. }
  67. String text = getText();
  68. int index = text.indexOf(filter);
  69. if (index == -1) {
  70. return;
  71. }
  72. String preMatch = text.substring(0, index);
  73. String match = text.substring(preMatch.length(), preMatch.length() + filter.length());
  74. int pmw = g.getFontMetrics().stringWidth(preMatch);
  75. int w = g.getFontMetrics().stringWidth(match);
  76.  
  77. g.setColor(selected ? fgSel : Color.yellow);
  78. g.fillRect(pmw, 0, w, getHeight());
  79. g.setColor(selected ? bgSel : getForeground());
  80. Rectangle r = g.getFontMetrics().getStringBounds(match, g).getBounds();
  81. g.drawString(match, pmw + 1, -r.y);
  82. }
  83.  
  84. @Override
  85. public Component getTableCellRendererComponent(JTable arg0,
  86. Object arg1, boolean selected, boolean arg3, int arg4, int arg5) {
  87. this.selected = selected;
  88. return super.getTableCellRendererComponent(arg0, arg1, selected, arg3, arg4, arg5);
  89. }
  90.  
  91. });
  92.  
  93. f.setVisible(true);
  94. }
  95. }
Add Comment
Please, Sign In to add comment