You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2018/03/10 05:40:14 UTC

[07/14] logging-chainsaw git commit: Replace anonymous classes with lambdas

http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/25eb0012/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
index 63286a1..c5ec888 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanel.java
@@ -322,11 +322,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     logPanelPreferencesFrame.setSize(740, 520);
 
     logPanelPreferencesPanel.setOkCancelActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          logPanelPreferencesFrame.setVisible(false);
-        }
-      });
+            e -> logPanelPreferencesFrame.setVisible(false));
 
         KeyStroke escape = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0, false);
             Action closeLogPanelPreferencesFrameAction = new AbstractAction() {
@@ -370,14 +366,12 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
 
     preferenceModel.addPropertyChangeListener(
       "scrollToBottom",
-      new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-          boolean value = (Boolean) evt.getNewValue();
-          if (value) {
-            scrollToBottom();
-          }
-        }
-      });
+            evt -> {
+              boolean value = (Boolean) evt.getNewValue();
+              if (value) {
+                scrollToBottom();
+              }
+            });
     /*
      * Menus on which the preferencemodels rely
      */
@@ -412,23 +406,15 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     final JCheckBoxMenuItem menuItemLoggerTree =
       new JCheckBoxMenuItem("Show Logger Tree");
     menuItemLoggerTree.addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          preferenceModel.setLogTreePanelVisible(
-            menuItemLoggerTree.isSelected());
-        }
-      });
+            e -> preferenceModel.setLogTreePanelVisible(
+              menuItemLoggerTree.isSelected()));
     menuItemLoggerTree.setIcon(new ImageIcon(ChainsawIcons.WINDOW_ICON));
 
     final JCheckBoxMenuItem menuItemToggleDetails =
       new JCheckBoxMenuItem("Show Detail Pane");
     menuItemToggleDetails.addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          preferenceModel.setDetailPaneVisible(
-            menuItemToggleDetails.isSelected());
-        }
-      });
+            e -> preferenceModel.setDetailPaneVisible(
+              menuItemToggleDetails.isSelected()));
 
     menuItemToggleDetails.setIcon(new ImageIcon(ChainsawIcons.INFO));
 
@@ -461,16 +447,14 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       });
 
     preferenceModel.addPropertyChangeListener("searchResultsVisible",
-      new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-          boolean displaySearchResultsInDetailsIfAvailable = (Boolean) evt.getNewValue();
-          if (displaySearchResultsInDetailsIfAvailable) {
-            showSearchResults();
-          } else {
-            hideSearchResults();
-          }
-        }
-      });
+            evt -> {
+              boolean displaySearchResultsInDetailsIfAvailable = (Boolean) evt.getNewValue();
+              if (displaySearchResultsInDetailsIfAvailable) {
+                showSearchResults();
+              } else {
+                hideSearchResults();
+              }
+            });
 
       preferenceModel.addPropertyChangeListener("highlightSearchMatchText",
         new PropertyChangeListener() {
@@ -485,34 +469,30 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
 
     preferenceModel.addPropertyChangeListener(
       "detailPaneVisible",
-      new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-          boolean detailPaneVisible = (Boolean) evt.getNewValue();
+            evt -> {
+              boolean detailPaneVisible = (Boolean) evt.getNewValue();
 
-          if (detailPaneVisible) {
-            showDetailPane();
-          } else {
-            //don't hide the detail pane if search results are being displayed
-            if (!searchResultsDisplayed) {
-              hideDetailPane();
-            }
-          }
-        }
-      });
+              if (detailPaneVisible) {
+                showDetailPane();
+              } else {
+                //don't hide the detail pane if search results are being displayed
+                if (!searchResultsDisplayed) {
+                  hideDetailPane();
+                }
+              }
+            });
 
     preferenceModel.addPropertyChangeListener(
       "logTreePanelVisible",
-      new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-          boolean newValue = (Boolean) evt.getNewValue();
+            evt -> {
+              boolean newValue = (Boolean) evt.getNewValue();
 
-          if (newValue) {
-            showLogTreePanel();
-          } else {
-            hideLogTreePanel();
-          }
-        }
-      });
+              if (newValue) {
+                showLogTreePanel();
+              } else {
+                hideLogTreePanel();
+              }
+            });
     
     preferenceModel.addPropertyChangeListener("toolTips",
       new PropertyChangeListener() {
@@ -588,17 +568,15 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     preferenceModel.addPropertyChangeListener("dateFormatPattern", datePrefsChangeListener);
     preferenceModel.addPropertyChangeListener("dateFormatTimeZone", datePrefsChangeListener);
 
-    preferenceModel.addPropertyChangeListener("clearTableExpression", new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-            LogPanelPreferenceModel model = (LogPanelPreferenceModel)evt.getSource();
-            String expression = model.getClearTableExpression();
-            try {
-                clearTableExpressionRule = ExpressionRule.getRule(expression);
-                logger.info("clearTableExpressionRule set to: " + expression);
-            } catch (Exception e) {
-                logger.info("clearTableExpressionRule invalid - ignoring: " + expression);
-                clearTableExpressionRule = null;
-            }
+    preferenceModel.addPropertyChangeListener("clearTableExpression", evt -> {
+        LogPanelPreferenceModel model = (LogPanelPreferenceModel)evt.getSource();
+        String expression = model.getClearTableExpression();
+        try {
+            clearTableExpressionRule = ExpressionRule.getRule(expression);
+            logger.info("clearTableExpressionRule set to: " + expression);
+        } catch (Exception e) {
+            logger.info("clearTableExpressionRule invalid - ignoring: " + expression);
+            clearTableExpressionRule = null;
         }
     });
 
@@ -616,31 +594,25 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       });
 
     preferenceModel.addPropertyChangeListener("toolTips",
-      new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-          boolean value = (Boolean) evt.getNewValue();
-          searchToggleToolTips.setSelected(value);
-          mainToggleToolTips.setSelected(value);
-        }
-      });
+            evt -> {
+              boolean value = (Boolean) evt.getNewValue();
+              searchToggleToolTips.setSelected(value);
+              mainToggleToolTips.setSelected(value);
+            });
 
     preferenceModel.addPropertyChangeListener(
       "logTreePanelVisible",
-      new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-          boolean value = (Boolean) evt.getNewValue();
-          menuItemLoggerTree.setSelected(value);
-        }
-      });
+            evt -> {
+              boolean value = (Boolean) evt.getNewValue();
+              menuItemLoggerTree.setSelected(value);
+            });
 
     preferenceModel.addPropertyChangeListener(
       "detailPaneVisible",
-      new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-          boolean value = (Boolean) evt.getNewValue();
-          menuItemToggleDetails.setSelected(value);
-        }
-      });
+            evt -> {
+              boolean value = (Boolean) evt.getNewValue();
+              menuItemToggleDetails.setSelected(value);
+            });
 
     applicationPreferenceModel.addPropertyChangeListener("searchColor", new PropertyChangeListener() {
         public void propertyChange(PropertyChangeEvent evt)
@@ -702,11 +674,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     searchTable.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(KeyStroke.getKeyStroke(KeyEvent.VK_A, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()), "none");
 
     //add a listener to update the 'refine focus'
-    tableModel.addNewKeyListener(new NewKeyListener() {
-		public void newKeyAdded(NewKeyEvent e) {
-          columnNameKeywordMap.put(e.getKey(), "PROP." + e.getKey());
-		}
-    });
+    tableModel.addNewKeyListener(e -> columnNameKeywordMap.put(e.getKey(), "PROP." + e.getKey()));
 
     /*
      * Set the Display rule to use the mediator, the model will add itself as
@@ -716,14 +684,12 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     searchModel.setRuleMediator(searchRuleMediator);
 
     tableModel.addEventCountListener(
-      new EventCountListener() {
-        public void eventCountChanged(int currentCount, int totalCount) {
-          if (LogPanel.this.isVisible()) {
-            statusBar.setSelectedLine(
-              table.getSelectedRow() + 1, currentCount, totalCount, getIdentifier());
-          }
-        }
-      });
+            (currentCount, totalCount) -> {
+              if (LogPanel.this.isVisible()) {
+                statusBar.setSelectedLine(
+                  table.getSelectedRow() + 1, currentCount, totalCount, getIdentifier());
+              }
+            });
 
     tableModel.addEventCountListener(
       new EventCountListener() {
@@ -768,14 +734,10 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
      */
     LogPanelLoggerTreeModel logTreeModel = new LogPanelLoggerTreeModel();
     logTreePanel = new LoggerNameTreePanel(logTreeModel, preferenceModel, this, colorizer, filterModel);
-    logTreePanel.getLoggerVisibilityRule().addPropertyChangeListener(new PropertyChangeListener()
-    {
-        public void propertyChange(PropertyChangeEvent evt)
-        {
-            if (evt.getPropertyName().equals("searchExpression")) {
-                findCombo.setSelectedItem(evt.getNewValue().toString());
-                findNext();
-            }
+    logTreePanel.getLoggerVisibilityRule().addPropertyChangeListener(evt -> {
+        if (evt.getPropertyName().equals("searchExpression")) {
+            findCombo.setSelectedItem(evt.getNewValue().toString());
+            findNext();
         }
     });
       
@@ -813,11 +775,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
                 getActionMap().put("ESCAPE", closeColorPanelAction);
 
     colorPanel.setCloseActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          colorFrame.setVisible(false);
-        }
-      });
+            e -> colorFrame.setVisible(false));
 
     colorizer.addPropertyChangeListener(
       "colorrule",
@@ -891,33 +849,31 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
     searchTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
 
-    table.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
-        public void valueChanged(ListSelectionEvent evt) {
-            if (((evt.getFirstIndex() == evt.getLastIndex())
-                && (evt.getFirstIndex() > 0) && previousLastIndex != -1) || (evt.getValueIsAdjusting())) {
-              return;
-            }
-            boolean lastIndexOnLastRow = (evt.getLastIndex() == (table.getRowCount() - 1));
-            boolean lastIndexSame = (previousLastIndex == evt.getLastIndex());
+    table.getSelectionModel().addListSelectionListener(evt -> {
+        if (((evt.getFirstIndex() == evt.getLastIndex())
+            && (evt.getFirstIndex() > 0) && previousLastIndex != -1) || (evt.getValueIsAdjusting())) {
+          return;
+        }
+        boolean lastIndexOnLastRow = (evt.getLastIndex() == (table.getRowCount() - 1));
+        boolean lastIndexSame = (previousLastIndex == evt.getLastIndex());
 
-            /*
-             * when scroll-to-bottom is active, here is what events look like:
-             * rowcount-1: 227, last: 227, previous last: 191..first: 191
-             *
-             * when the user has unselected the bottom row, here is what the events look like:
-             * rowcount-1: 227, last: 227, previous last: 227..first: 222
-             *
-             * note: previouslast is set after it is evaluated in the bypass scroll check
-            */
-           //System.out.println("rowcount: " + (table.getRowCount() - 1) + ", last: " + evt.getLastIndex() +", previous last: " + previousLastIndex + "..first: " + evt.getFirstIndex() + ", isadjusting: " + evt.getValueIsAdjusting());
-
-            boolean disableScrollToBottom = (lastIndexOnLastRow && lastIndexSame && previousLastIndex != evt.getFirstIndex());
-            if (disableScrollToBottom && isScrollToBottom() && table.getRowCount() > 0) {
-              preferenceModel.setScrollToBottom(false);
-            }
-            previousLastIndex = evt.getLastIndex();
-          }
+        /*
+         * when scroll-to-bottom is active, here is what events look like:
+         * rowcount-1: 227, last: 227, previous last: 191..first: 191
+         *
+         * when the user has unselected the bottom row, here is what the events look like:
+         * rowcount-1: 227, last: 227, previous last: 227..first: 222
+         *
+         * note: previouslast is set after it is evaluated in the bypass scroll check
+        */
+       //System.out.println("rowcount: " + (table.getRowCount() - 1) + ", last: " + evt.getLastIndex() +", previous last: " + previousLastIndex + "..first: " + evt.getFirstIndex() + ", isadjusting: " + evt.getValueIsAdjusting());
+
+        boolean disableScrollToBottom = (lastIndexOnLastRow && lastIndexSame && previousLastIndex != evt.getFirstIndex());
+        if (disableScrollToBottom && isScrollToBottom() && table.getRowCount() > 0) {
+          preferenceModel.setScrollToBottom(false);
         }
+        previousLastIndex = evt.getLastIndex();
+      }
     );
 
     table.getSelectionModel().addListSelectionListener(
@@ -994,35 +950,30 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
      * added as columns
      */
     tableModel.addNewKeyListener(
-      new NewKeyListener() {
-        public void newKeyAdded(final NewKeyEvent e) {
-        	SwingHelper.invokeOnEDT(new Runnable() {
-        		public void run() {
-           // don't add the column if we already know about it, this could be if we've seen it before and saved the column preferences
-            //this may throw an illegalargexception - ignore it because we need to add only if not already added
-        	//if the column is already added, don't add again
-        	
-        	try {
-        	if(table.getColumn(e.getKey())!=null){
-                return;
-            }
-            //no need to check search table - we use the same columns
-        	} catch (IllegalArgumentException iae) {}
-          TableColumn col = new TableColumn(e.getNewModelIndex());
-          col.setHeaderValue(e.getKey());
-
-          if (preferenceModel.addColumn(col)) {
-            if (preferenceModel.isColumnVisible(col) || !applicationPreferenceModel.isDefaultColumnsSet() || applicationPreferenceModel.isDefaultColumnsSet() &&
-                applicationPreferenceModel.getDefaultColumnNames().contains(col.getHeaderValue())) {
-              table.addColumn(col);
-                searchTable.addColumn(col);
-          	  preferenceModel.setColumnVisible(e.getKey().toString(), true);
-            }
-          }
-        		}
-        	});
-        }
-      });
+            e -> SwingHelper.invokeOnEDT(() -> {
+// don't add the column if we already know about it, this could be if we've seen it before and saved the column preferences
+//this may throw an illegalargexception - ignore it because we need to add only if not already added
+              //if the column is already added, don't add again
+
+              try {
+                if (table.getColumn(e.getKey()) != null) {
+                  return;
+                }
+//no need to check search table - we use the same columns
+              } catch (IllegalArgumentException iae) {
+              }
+              TableColumn col = new TableColumn(e.getNewModelIndex());
+              col.setHeaderValue(e.getKey());
+
+              if (preferenceModel.addColumn(col)) {
+                if (preferenceModel.isColumnVisible(col) || !applicationPreferenceModel.isDefaultColumnsSet() || applicationPreferenceModel.isDefaultColumnsSet() &&
+                        applicationPreferenceModel.getDefaultColumnNames().contains(col.getHeaderValue())) {
+                  table.addColumn(col);
+                  searchTable.addColumn(col);
+                  preferenceModel.setColumnVisible(e.getKey().toString(), true);
+                }
+              }
+            }));
 
     //if the table is refiltered, try to reselect the last selected row
     //refilter with a newValue of TRUE means refiltering is about to begin
@@ -1242,14 +1193,12 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     });
     findMarkerRule = ExpressionRule.getRule("prop." + ChainsawConstants.LOG4J_MARKER_COL_NAME_LOWERCASE + " exists");
         
-    tableModel.addTableModelListener(new TableModelListener() {
-		public void tableChanged(TableModelEvent e) {
-            int currentRow = table.getSelectedRow();
-            if (e.getFirstRow() <= currentRow && e.getLastRow() >= currentRow) {
-                //current row has changed - update
-                detailPaneUpdater.setAndUpdateSelectedRow(table.getSelectedRow());
-            }
-		}
+    tableModel.addTableModelListener(e -> {
+int currentRow = table.getSelectedRow();
+if (e.getFirstRow() <= currentRow && e.getLastRow() >= currentRow) {
+//current row has changed - update
+detailPaneUpdater.setAndUpdateSelectedRow(table.getSelectedRow());
+}
     });
     addPropertyChangeListener("detailPaneConversionPattern", detailPaneUpdater);
 
@@ -1324,20 +1273,14 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     layoutEditorDialog.setSize(640, 480);
 
     layoutEditorPane.addCancelActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          layoutEditorDialog.setVisible(false);
-        }
-      });
+            e -> layoutEditorDialog.setVisible(false));
 
     layoutEditorPane.addOkActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          setDetailPaneConversionPattern(
-            layoutEditorPane.getConversionPattern());
-          layoutEditorDialog.setVisible(false);
-        }
-      });
+            e -> {
+              setDetailPaneConversionPattern(
+                layoutEditorPane.getConversionPattern());
+              layoutEditorDialog.setVisible(false);
+            });
 
     Action copyToRefineFocusAction = new AbstractAction("Set 'refine focus' field") {
         public void actionPerformed(ActionEvent e) {
@@ -1489,16 +1432,14 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       public BestFit() {
         super("Best fit column");
     addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent evt) {
-          if (currentPoint != null) {
-            int column = currentTable.columnAtPoint(currentPoint);
-            int maxWidth = getMaxColumnWidth(column);
-            currentTable.getColumnModel().getColumn(column).setPreferredWidth(
-              maxWidth);
-          }
-        }
-      });
+            evt -> {
+              if (currentPoint != null) {
+                int column = currentTable.columnAtPoint(currentPoint);
+                int maxWidth = getMaxColumnWidth(column);
+                currentTable.getColumnModel().getColumn(column).setPreferredWidth(
+                  maxWidth);
+              }
+            });
       }
     }
 
@@ -1507,11 +1448,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
         super("Color settings...");
         setIcon(ChainsawIcons.ICON_PREFERENCES);
   addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent evt) {
-          showColorPreferences();
-        }
-      });
+          evt -> showColorPreferences());
       }
     }
 
@@ -1520,11 +1457,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
         super("Tab Preferences...");
         setIcon(ChainsawIcons.ICON_PREFERENCES);
     addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent evt) {
-          showPreferences();
-        }
-      });
+            evt -> showPreferences());
     }
   }
 
@@ -1532,23 +1465,21 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       public FocusOn() {
         super("Set 'refine focus' field to value under pointer");
     addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent evt) {
-          if (currentPoint != null) {
-            String operator = "==";
-            int column = currentTable.columnAtPoint(currentPoint);
-            int row = currentTable.rowAtPoint(currentPoint);
-            String colName = currentTable.getColumnName(column).toUpperCase();
-            String value = getValueOf(row, column);
-
-            if (columnNameKeywordMap.containsKey(colName)) {
-              filterText.setText(
-                columnNameKeywordMap.get(colName).toString() + " " + operator
-                + " '" + value + "'");
-            }
-          }
-        }
-      });
+            evt -> {
+              if (currentPoint != null) {
+                String operator = "==";
+                int column = currentTable.columnAtPoint(currentPoint);
+                int row = currentTable.rowAtPoint(currentPoint);
+                String colName = currentTable.getColumnName(column).toUpperCase();
+                String value = getValueOf(row, column);
+
+                if (columnNameKeywordMap.containsKey(colName)) {
+                  filterText.setText(
+                    columnNameKeywordMap.get(colName).toString() + " " + operator
+                    + " '" + value + "'");
+                }
+              }
+            });
       }
     }
 
@@ -1556,25 +1487,23 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       public DefineAddCustomFilter() {
         super("Add value under pointer to 'refine focus' field");
   addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent evt) {
-          if (currentPoint != null) {
-            String operator = "==";
-            int column = currentTable.columnAtPoint(currentPoint);
-            int row = currentTable.rowAtPoint(currentPoint);
-            String value = getValueOf(row, column);
-            String colName = currentTable.getColumnName(column).toUpperCase();
+          evt -> {
+            if (currentPoint != null) {
+              String operator = "==";
+              int column = currentTable.columnAtPoint(currentPoint);
+              int row = currentTable.rowAtPoint(currentPoint);
+              String value = getValueOf(row, column);
+              String colName = currentTable.getColumnName(column).toUpperCase();
+
+              if (columnNameKeywordMap.containsKey(colName)) {
+                filterText.setText(
+                  filterText.getText() + " && "
+                  + columnNameKeywordMap.get(colName).toString() + " "
+                  + operator + " '" + value + "'");
+              }
 
-            if (columnNameKeywordMap.containsKey(colName)) {
-              filterText.setText(
-                filterText.getText() + " && "
-                + columnNameKeywordMap.get(colName).toString() + " "
-                + operator + " '" + value + "'");
             }
-
-          }
-        }
-      });
+          });
       }
     }
 
@@ -1582,25 +1511,23 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       public DefineAddCustomFind() {
         super("Add value under pointer to 'find' field");
   addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent evt) {
-          if (currentPoint != null) {
-            String operator = "==";
-            int column = currentTable.columnAtPoint(currentPoint);
-            int row = currentTable.rowAtPoint(currentPoint);
-            String value = getValueOf(row, column);
-            String colName = currentTable.getColumnName(column).toUpperCase();
-
-            if (columnNameKeywordMap.containsKey(colName)) {
-              findCombo.setSelectedItem(
-                findText.getText() + " && "
-                + columnNameKeywordMap.get(colName).toString() + " "
-                + operator + " '" + value + "'");
-              findNext();
+          evt -> {
+            if (currentPoint != null) {
+              String operator = "==";
+              int column = currentTable.columnAtPoint(currentPoint);
+              int row = currentTable.rowAtPoint(currentPoint);
+              String value = getValueOf(row, column);
+              String colName = currentTable.getColumnName(column).toUpperCase();
+
+              if (columnNameKeywordMap.containsKey(colName)) {
+                findCombo.setSelectedItem(
+                  findText.getText() + " && "
+                  + columnNameKeywordMap.get(colName).toString() + " "
+                  + operator + " '" + value + "'");
+                findNext();
+              }
             }
-          }
-        }
-      });
+          });
       }
     }
 
@@ -1608,26 +1535,24 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       public BuildColorRule() {
         super("Define color rule for value under pointer");
       addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent evt) {
-          if (currentPoint != null) {
-            String operator = "==";
-            int column = currentTable.columnAtPoint(currentPoint);
-            int row = currentTable.rowAtPoint(currentPoint);
-            String colName = currentTable.getColumnName(column).toUpperCase();
-            String value = getValueOf(row, column);
-
-            if (columnNameKeywordMap.containsKey(colName)) {
-                Color c = JColorChooser.showDialog(getRootPane(), "Choose a color", Color.red);
-                if (c != null) {
-                    String expression = columnNameKeywordMap.get(colName).toString() + " " + operator + " '" + value + "'";
-                    colorizer.addRule(ChainsawConstants.DEFAULT_COLOR_RULE_NAME, new ColorRule(expression,
-                            ExpressionRule.getRule(expression), c, ChainsawConstants.COLOR_DEFAULT_FOREGROUND));
+              evt -> {
+                if (currentPoint != null) {
+                  String operator = "==";
+                  int column = currentTable.columnAtPoint(currentPoint);
+                  int row = currentTable.rowAtPoint(currentPoint);
+                  String colName = currentTable.getColumnName(column).toUpperCase();
+                  String value = getValueOf(row, column);
+
+                  if (columnNameKeywordMap.containsKey(colName)) {
+                      Color c = JColorChooser.showDialog(getRootPane(), "Choose a color", Color.red);
+                      if (c != null) {
+                          String expression = columnNameKeywordMap.get(colName).toString() + " " + operator + " '" + value + "'";
+                          colorizer.addRule(ChainsawConstants.DEFAULT_COLOR_RULE_NAME, new ColorRule(expression,
+                                  ExpressionRule.getRule(expression), c, ChainsawConstants.COLOR_DEFAULT_FOREGROUND));
+                      }
+                  }
                 }
-            }
-          }
-        }
-      });
+              });
       }
     }
 
@@ -1722,23 +1647,21 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
         super("Find value under pointer");
 
     addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent evt) {
-          if (currentPoint != null) {
-            String operator = "==";
-            int column = currentTable.columnAtPoint(currentPoint);
-            int row = currentTable.rowAtPoint(currentPoint);
-            String colName = currentTable.getColumnName(column).toUpperCase();
-            String value = getValueOf(row, column);
-            if (columnNameKeywordMap.containsKey(colName)) {
-              findCombo.setSelectedItem(
-                columnNameKeywordMap.get(colName).toString() + " " + operator
-                + " '" + value + "'");
-              findNext();
-            }
-          }
-        }
-      });
+            evt -> {
+              if (currentPoint != null) {
+                String operator = "==";
+                int column = currentTable.columnAtPoint(currentPoint);
+                int row = currentTable.rowAtPoint(currentPoint);
+                String colName = currentTable.getColumnName(column).toUpperCase();
+                String value = getValueOf(row, column);
+                if (columnNameKeywordMap.containsKey(colName)) {
+                  findCombo.setSelectedItem(
+                    columnNameKeywordMap.get(colName).toString() + " " + operator
+                    + " '" + value + "'");
+                  findNext();
+                }
+              }
+            });
       }
     }
 
@@ -1766,15 +1689,13 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       public DisplayNormalTimes() {
         super("Hide relative times");
   addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-          if (currentPoint != null) {
-            ((TableColorizingRenderer)currentTable.getDefaultRenderer(Object.class)).setUseNormalTimes();
-            ((ChainsawCyclicBufferTableModel)currentTable.getModel()).reFilter();
-            setEnabled(true);
-          }
-        }
-    });
+          e -> {
+            if (currentPoint != null) {
+              ((TableColorizingRenderer)currentTable.getDefaultRenderer(Object.class)).setUseNormalTimes();
+              ((ChainsawCyclicBufferTableModel)currentTable.getModel()).reFilter();
+              setEnabled(true);
+            }
+          });
       }
     }
 
@@ -1782,21 +1703,19 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     public DisplayRelativeTimesToRowUnderCursor() {
       super("Show times relative to this event");
       addActionListener(
-      new ActionListener() {
-        public void actionPerformed(ActionEvent e) {
-            if (currentPoint != null) {
-              int row = currentTable.rowAtPoint(currentPoint);
-              ChainsawCyclicBufferTableModel cyclicBufferTableModel = (ChainsawCyclicBufferTableModel) currentTable.getModel();
-              LoggingEventWrapper loggingEventWrapper = cyclicBufferTableModel.getRow(row);
-              if (loggingEventWrapper != null)
-              {
-                  ((TableColorizingRenderer)currentTable.getDefaultRenderer(Object.class)).setUseRelativeTimes(loggingEventWrapper.getLoggingEvent().getTimeStamp());
-                  cyclicBufferTableModel.reFilter();
-              }
-              setEnabled(true);
-            }
-        }
-      });
+              e -> {
+                  if (currentPoint != null) {
+                    int row = currentTable.rowAtPoint(currentPoint);
+                    ChainsawCyclicBufferTableModel cyclicBufferTableModel = (ChainsawCyclicBufferTableModel) currentTable.getModel();
+                    LoggingEventWrapper loggingEventWrapper = cyclicBufferTableModel.getRow(row);
+                    if (loggingEventWrapper != null)
+                    {
+                        ((TableColorizingRenderer)currentTable.getDefaultRenderer(Object.class)).setUseRelativeTimes(loggingEventWrapper.getLoggingEvent().getTimeStamp());
+                        cyclicBufferTableModel.reFilter();
+                    }
+                    setEnabled(true);
+                  }
+              });
     }
     }
 
@@ -1804,15 +1723,13 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       public DisplayRelativeTimesToPreviousRow() {
         super("Show times relative to previous rows");
       addActionListener(
-        new ActionListener() {
-          public void actionPerformed(ActionEvent e) {
-              if (currentPoint != null) {
-                ((TableColorizingRenderer)currentTable.getDefaultRenderer(Object.class)).setUseRelativeTimesToPreviousRow();
-                ((ChainsawCyclicBufferTableModel)currentTable.getModel()).reFilter();
-                setEnabled(true);
-              }
-          }
-        });
+              e -> {
+                  if (currentPoint != null) {
+                    ((TableColorizingRenderer)currentTable.getDefaultRenderer(Object.class)).setUseRelativeTimesToPreviousRow();
+                    ((ChainsawCyclicBufferTableModel)currentTable.getModel()).reFilter();
+                    setEnabled(true);
+                  }
+              });
       }
     }
 
@@ -2074,21 +1991,16 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
   
   private void scrollToBottom() {
     //run this in an invokeLater block to ensure this action is enqueued to the end of the EDT
-    EventQueue.invokeLater(new Runnable()
-    {
-        public void run() {
-          int scrollRow = tableModel.getRowCount() - 1;
-            table.scrollToRow(scrollRow);
-        }
+    EventQueue.invokeLater(() -> {
+      int scrollRow = tableModel.getRowCount() - 1;
+        table.scrollToRow(scrollRow);
     });
   }
 
   public void scrollToTop() {
-      EventQueue.invokeLater(new Runnable() {
-          public void run() {
-              if (tableModel.getRowCount() > 1) {
-                  table.scrollToRow(0);
-              }
+      EventQueue.invokeLater(() -> {
+          if (tableModel.getRowCount() > 1) {
+              table.scrollToRow(0);
           }
       });
   }
@@ -2124,89 +2036,87 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
    */
   public void receiveEventBatch(String ident, final List events) {
 
-    SwingHelper.invokeOnEDT(new Runnable() {
-      public void run() {
-        /*
-        * if this panel is paused, we totally ignore events
-        */
-        if (isPaused()) {
-          return;
-        }
-        final int selectedRow = table.getSelectedRow();
-        final int startingRow = table.getRowCount();
-        final LoggingEventWrapper selectedEvent;
-        if (selectedRow >= 0) {
-          selectedEvent = tableModel.getRow(selectedRow);
-        } else {
-          selectedEvent = null;
-        }
-
-        final int startingSearchRow = searchTable.getRowCount();
-
-        boolean rowAdded = false;
-        boolean searchRowAdded = false;
+    SwingHelper.invokeOnEDT(() -> {
+      /*
+      * if this panel is paused, we totally ignore events
+      */
+      if (isPaused()) {
+        return;
+      }
+      final int selectedRow = table.getSelectedRow();
+      final int startingRow = table.getRowCount();
+      final LoggingEventWrapper selectedEvent;
+      if (selectedRow >= 0) {
+        selectedEvent = tableModel.getRow(selectedRow);
+      } else {
+        selectedEvent = null;
+      }
 
-        int addedRowCount = 0;
-        int searchAddedRowCount = 0;
+      final int startingSearchRow = searchTable.getRowCount();
 
-        for (Object event1 : events) {
-          //these are actual LoggingEvent instances
-          LoggingEvent event = (LoggingEvent) event1;
-          //create two separate loggingEventWrappers (main table and search table), as they have different info on display state
-          LoggingEventWrapper loggingEventWrapper1 = new LoggingEventWrapper(event);
-          //if the clearTableExpressionRule is not null, evaluate & clear the table if it matches
-          if (clearTableExpressionRule != null && clearTableExpressionRule.evaluate(event, null)) {
-            logger.info("clear table expression matched - clearing table - matching event msg - " + event.getMessage());
-            clearEvents();
-          }
+      boolean rowAdded = false;
+      boolean searchRowAdded = false;
 
-          updateOtherModels(event);
-          boolean isCurrentRowAdded = tableModel.isAddRow(loggingEventWrapper1);
-          if (isCurrentRowAdded) {
-            addedRowCount++;
-          }
-          rowAdded = rowAdded || isCurrentRowAdded;
+      int addedRowCount = 0;
+      int searchAddedRowCount = 0;
 
-          //create a new loggingEventWrapper via copy constructor to ensure same IDs
-          LoggingEventWrapper loggingEventWrapper2 = new LoggingEventWrapper(loggingEventWrapper1);
-          boolean isSearchCurrentRowAdded = searchModel.isAddRow(loggingEventWrapper2);
-          if (isSearchCurrentRowAdded) {
-            searchAddedRowCount++;
-          }
-          searchRowAdded = searchRowAdded || isSearchCurrentRowAdded;
+      for (Object event1 : events) {
+        //these are actual LoggingEvent instances
+        LoggingEvent event = (LoggingEvent) event1;
+        //create two separate loggingEventWrappers (main table and search table), as they have different info on display state
+        LoggingEventWrapper loggingEventWrapper1 = new LoggingEventWrapper(event);
+        //if the clearTableExpressionRule is not null, evaluate & clear the table if it matches
+        if (clearTableExpressionRule != null && clearTableExpressionRule.evaluate(event, null)) {
+          logger.info("clear table expression matched - clearing table - matching event msg - " + event.getMessage());
+          clearEvents();
         }
-        //fire after adding all events
-        if (rowAdded) {
-          tableModel.fireTableEvent(startingRow, startingRow + addedRowCount, addedRowCount);
+
+        updateOtherModels(event);
+        boolean isCurrentRowAdded = tableModel.isAddRow(loggingEventWrapper1);
+        if (isCurrentRowAdded) {
+          addedRowCount++;
         }
-        if (searchRowAdded) {
-          searchModel.fireTableEvent(startingSearchRow, startingSearchRow + searchAddedRowCount, searchAddedRowCount);
+        rowAdded = rowAdded || isCurrentRowAdded;
+
+        //create a new loggingEventWrapper via copy constructor to ensure same IDs
+        LoggingEventWrapper loggingEventWrapper2 = new LoggingEventWrapper(loggingEventWrapper1);
+        boolean isSearchCurrentRowAdded = searchModel.isAddRow(loggingEventWrapper2);
+        if (isSearchCurrentRowAdded) {
+          searchAddedRowCount++;
         }
+        searchRowAdded = searchRowAdded || isSearchCurrentRowAdded;
+      }
+      //fire after adding all events
+      if (rowAdded) {
+        tableModel.fireTableEvent(startingRow, startingRow + addedRowCount, addedRowCount);
+      }
+      if (searchRowAdded) {
+        searchModel.fireTableEvent(startingSearchRow, startingSearchRow + searchAddedRowCount, searchAddedRowCount);
+      }
 
-        //tell the model to notify the count listeners
-        tableModel.notifyCountListeners();
+      //tell the model to notify the count listeners
+      tableModel.notifyCountListeners();
 
-        if (rowAdded) {
-          if (tableModel.isSortEnabled()) {
-            tableModel.sort();
-          }
-
-          //always update detail pane (since we may be using a cyclic buffer which is full)
-          detailPaneUpdater.setSelectedRow(table.getSelectedRow());
+      if (rowAdded) {
+        if (tableModel.isSortEnabled()) {
+          tableModel.sort();
         }
 
-        if (searchRowAdded) {
-          if (searchModel.isSortEnabled()) {
-            searchModel.sort();
-          }
+        //always update detail pane (since we may be using a cyclic buffer which is full)
+        detailPaneUpdater.setSelectedRow(table.getSelectedRow());
+      }
+
+      if (searchRowAdded) {
+        if (searchModel.isSortEnabled()) {
+          searchModel.sort();
         }
+      }
 
-        if (!isScrollToBottom() && selectedEvent != null) {
-          final int newIndex = tableModel.getRowIndex(selectedEvent);
-          if (newIndex >= 0) {
-            // Don't scroll, just maintain selection...
-            table.setRowSelectionInterval(newIndex, newIndex);
-          }
+      if (!isScrollToBottom() && selectedEvent != null) {
+        final int newIndex = tableModel.getRowIndex(selectedEvent);
+        if (newIndex >= 0) {
+          // Don't scroll, just maintain selection...
+          table.setRowSelectionInterval(newIndex, newIndex);
         }
       }
     });
@@ -2538,11 +2448,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     dockingAction.putValue(Action.NAME, "Dock");
     dockingAction.putValue(Action.SMALL_ICON, ChainsawIcons.ICON_DOCK);
     if (row > -1) {
-        EventQueue.invokeLater(new Runnable() {
-            public void run() {
-                table.scrollToRow(row);
-            }
-        });
+        EventQueue.invokeLater(() -> table.scrollToRow(row));
     }
   }
 
@@ -2826,11 +2732,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
 
     addPropertyChangeListener(
       "paused",
-      new PropertyChangeListener() {
-        public void propertyChange(PropertyChangeEvent evt) {
-          dockPauseButton.getModel().setSelected(isPaused());
-        }
-      });
+            evt -> dockPauseButton.getModel().setSelected(isPaused()));
     toolbar.add(dockPauseButton);
 
     Action dockShowPrefsAction =
@@ -2865,11 +2767,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
 
     final SmallToggleButton toggleLogTreeButton =
       new SmallToggleButton(dockToggleLogTreeAction);
-    preferenceModel.addPropertyChangeListener("logTreePanelVisible", new PropertyChangeListener() {
-    	public void propertyChange(PropertyChangeEvent evt) {
-    	    toggleLogTreeButton.setSelected(preferenceModel.isLogTreePanelVisible());    		
-    	}
-    });
+    preferenceModel.addPropertyChangeListener("logTreePanelVisible", evt -> toggleLogTreeButton.setSelected(preferenceModel.isLogTreePanelVisible()));
     		
     toggleLogTreeButton.setSelected(isLogTreeVisible());
     toolbar.add(toggleLogTreeButton);
@@ -2912,11 +2810,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
 
       final SmallToggleButton toggleScrollToBottomButton =
         new SmallToggleButton(dockToggleScrollToBottomAction);
-      preferenceModel.addPropertyChangeListener("scrollToBottom", new PropertyChangeListener() {
-      	public void propertyChange(PropertyChangeEvent evt) {
-      	    toggleScrollToBottomButton.setSelected(isScrollToBottom());    		
-      	}
-      });
+      preferenceModel.addPropertyChangeListener("scrollToBottom", evt -> toggleScrollToBottomButton.setSelected(isScrollToBottom()));
 
       toggleScrollToBottomButton.getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
   	      KeyStroke.getKeyStroke(KeyEvent.VK_B, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
@@ -2929,13 +2823,11 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
       toolbar.add(toggleScrollToBottomButton);
       toolbar.addSeparator();
 
-    findCombo.addActionListener(new ActionListener(){
-        public void actionPerformed(ActionEvent e) {
-          //comboboxchanged event received when text is modified in the field..when enter is pressed, it's comboboxedited
-          if (e.getActionCommand().equalsIgnoreCase("comboBoxEdited")) {
-              findNext();
-          }
-        }
+    findCombo.addActionListener(e -> {
+      //comboboxchanged event received when text is modified in the field..when enter is pressed, it's comboboxedited
+      if (e.getActionCommand().equalsIgnoreCase("comboBoxEdited")) {
+          findNext();
+      }
     });
     Action redockAction =
       new AbstractAction("", ChainsawIcons.ICON_DOCK) {
@@ -2959,14 +2851,12 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
    */
   protected void updateStatusBar() {
     SwingHelper.invokeOnEDT(
-      new Runnable() {
-        public void run() {
-          statusBar.setSelectedLine(
-            table.getSelectedRow() + 1, tableModel.getRowCount(),
-            tableModel.size(), getIdentifier());
-          statusBar.setSearchMatchCount(currentSearchMatchCount, getIdentifier());
-        }
-      });
+            () -> {
+              statusBar.setSelectedLine(
+                table.getSelectedRow() + 1, tableModel.getRowCount(),
+                tableModel.size(), getIdentifier());
+              statusBar.setSearchMatchCount(currentSearchMatchCount, getIdentifier());
+            });
   }
 
   /**
@@ -3008,23 +2898,19 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
   }
 
   public void findNextColorizedEvent() {
-    EventQueue.invokeLater(new Runnable() {
-        public void run() {
-            final int nextRow = tableModel.findColoredRow(table.getSelectedRow() + 1, true);
-            if (nextRow > -1) {
-                table.scrollToRow(nextRow);
-            }
+    EventQueue.invokeLater(() -> {
+        final int nextRow = tableModel.findColoredRow(table.getSelectedRow() + 1, true);
+        if (nextRow > -1) {
+            table.scrollToRow(nextRow);
         }
     });
   }
 
   public void findPreviousColorizedEvent() {
-    EventQueue.invokeLater(new Runnable() {
-        public void run() {
-            final int previousRow = tableModel.findColoredRow(table.getSelectedRow() - 1, false);
-            if (previousRow > -1) {
-                table.scrollToRow(previousRow);
-            }
+    EventQueue.invokeLater(() -> {
+        final int previousRow = tableModel.findColoredRow(table.getSelectedRow() - 1, false);
+        if (previousRow > -1) {
+            table.scrollToRow(previousRow);
         }
     });
   }
@@ -3039,30 +2925,28 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     updateFindRule(item == null ? null: item.toString());
 
     if (findRule != null) {
-        EventQueue.invokeLater(new Runnable() {
-            public void run() {
-              final JTextField findText =(JTextField) findCombo.getEditor().getEditorComponent();
-                try {
-                  int filteredEventsSize = getFilteredEvents().size();
-                  int startRow = table.getSelectedRow() + 1;
-                    if (startRow > filteredEventsSize - 1) {
-                        startRow = 0;
-                    }
-                  //no selected row would return -1, so we'd start at row zero
-                  final int nextRow = tableModel.locate(findRule, startRow, true);
-
-                  if (nextRow > -1) {
-                    table.scrollToRow(nextRow);
-                    findText.setToolTipText("Enter an expression - right click or ctrl-space for menu - press enter to add to list");
-                  }
-                  findText.setBackground(UIManager.getColor("TextField.background"));
-                } catch (IllegalArgumentException iae) {
-                  findText.setToolTipText(iae.getMessage());
-                  findText.setBackground(ChainsawConstants.INVALID_EXPRESSION_BACKGROUND);
-                  colorizer.setFindRule(null);
-                  tableRuleMediator.setFindRule(null);
-                  searchRuleMediator.setFindRule(null);
+        EventQueue.invokeLater(() -> {
+          final JTextField findText =(JTextField) findCombo.getEditor().getEditorComponent();
+            try {
+              int filteredEventsSize = getFilteredEvents().size();
+              int startRow = table.getSelectedRow() + 1;
+                if (startRow > filteredEventsSize - 1) {
+                    startRow = 0;
                 }
+              //no selected row would return -1, so we'd start at row zero
+              final int nextRow = tableModel.locate(findRule, startRow, true);
+
+              if (nextRow > -1) {
+                table.scrollToRow(nextRow);
+                findText.setToolTipText("Enter an expression - right click or ctrl-space for menu - press enter to add to list");
+              }
+              findText.setBackground(UIManager.getColor("TextField.background"));
+            } catch (IllegalArgumentException iae) {
+              findText.setToolTipText(iae.getMessage());
+              findText.setBackground(ChainsawConstants.INVALID_EXPRESSION_BACKGROUND);
+              colorizer.setFindRule(null);
+              tableRuleMediator.setFindRule(null);
+              searchRuleMediator.setFindRule(null);
             }
         });
     }
@@ -3078,26 +2962,24 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     updateFindRule(item == null ? null: item.toString());
 
     if (findRule != null) {
-        EventQueue.invokeLater(new Runnable() {
-            public void run() {
-              final JTextField findText =(JTextField) findCombo.getEditor().getEditorComponent();
-                try {
-                    int startRow = table.getSelectedRow() - 1;
-                    int filteredEventsSize = getFilteredEvents().size();
-                    if (startRow < 0) {
-                        startRow = filteredEventsSize - 1;
-                    }
-                    final int previousRow = tableModel.locate(findRule, startRow, false);
+        EventQueue.invokeLater(() -> {
+          final JTextField findText =(JTextField) findCombo.getEditor().getEditorComponent();
+            try {
+                int startRow = table.getSelectedRow() - 1;
+                int filteredEventsSize = getFilteredEvents().size();
+                if (startRow < 0) {
+                    startRow = filteredEventsSize - 1;
+                }
+                final int previousRow = tableModel.locate(findRule, startRow, false);
 
-                    if (previousRow > -1) {
-                        table.scrollToRow(previousRow);
-                        findCombo.setToolTipText("Enter an expression - right click or ctrl-space for menu - press enter to add to list");
-                    }
-                  findText.setBackground(UIManager.getColor("TextField.background"));
-                } catch (IllegalArgumentException iae) {
-                  findText.setToolTipText(iae.getMessage());
-                  findText.setBackground(ChainsawConstants.INVALID_EXPRESSION_BACKGROUND);
+                if (previousRow > -1) {
+                    table.scrollToRow(previousRow);
+                    findCombo.setToolTipText("Enter an expression - right click or ctrl-space for menu - press enter to add to list");
                 }
+              findText.setBackground(UIManager.getColor("TextField.background"));
+            } catch (IllegalArgumentException iae) {
+              findText.setToolTipText(iae.getMessage());
+              findText.setBackground(ChainsawConstants.INVALID_EXPRESSION_BACKGROUND);
             }
         });
     }
@@ -3119,11 +3001,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     dockingAction.putValue(Action.NAME, "Undock");
     dockingAction.putValue(Action.SMALL_ICON, ChainsawIcons.ICON_UNDOCK);
     if (row > -1) {
-        EventQueue.invokeLater(new Runnable() {
-            public void run() {
-                table.scrollToRow(row);
-            }
-        });
+        EventQueue.invokeLater(() -> table.scrollToRow(row));
     }
   }
 
@@ -3267,35 +3145,31 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
   }
 
     public void findNextMarker() {
-      EventQueue.invokeLater(new Runnable() {
-          public void run() {
-              int startRow = table.getSelectedRow() + 1;
-              int filteredEventsSize = getFilteredEvents().size();
-              if (startRow > filteredEventsSize - 1) {
-                  startRow = 0;
-              }
-              final int nextRow = tableModel.locate(findMarkerRule, startRow, true);
+      EventQueue.invokeLater(() -> {
+          int startRow = table.getSelectedRow() + 1;
+          int filteredEventsSize = getFilteredEvents().size();
+          if (startRow > filteredEventsSize - 1) {
+              startRow = 0;
+          }
+          final int nextRow = tableModel.locate(findMarkerRule, startRow, true);
 
-              if (nextRow > -1) {
-                  table.scrollToRow(nextRow);
-              }
+          if (nextRow > -1) {
+              table.scrollToRow(nextRow);
           }
       });
     }
 
     public void findPreviousMarker() {
-        EventQueue.invokeLater(new Runnable() {
-            public void run() {
-                int startRow = table.getSelectedRow() - 1;
-                int filteredEventsSize = getFilteredEvents().size();
-                if (startRow < 0) {
-                    startRow = filteredEventsSize - 1;
-                }
-                final int previousRow = tableModel.locate(findMarkerRule, startRow, false);
+        EventQueue.invokeLater(() -> {
+            int startRow = table.getSelectedRow() - 1;
+            int filteredEventsSize = getFilteredEvents().size();
+            if (startRow < 0) {
+                startRow = filteredEventsSize - 1;
+            }
+            final int previousRow = tableModel.locate(findMarkerRule, startRow, false);
 
-                if (previousRow > -1) {
-                    table.scrollToRow(previousRow);
-                }
+            if (previousRow > -1) {
+                table.scrollToRow(previousRow);
             }
         });
     }
@@ -3368,36 +3242,34 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
 
       this.delayThread =
         new Thread(
-          new Runnable() {
-            public void run() {
-              while (true) {
-                try {
-                  Thread.sleep(CHECK_PERIOD);
-                } catch (InterruptedException e) {
-                }
+                () -> {
+                  while (true) {
+                    try {
+                      Thread.sleep(CHECK_PERIOD);
+                    } catch (InterruptedException e) {
+                    }
 
-                if (
-                  (System.currentTimeMillis() - lastTimeStamp) < CHECK_PERIOD) {
-                  // They typed something since the last check. we ignor
-                  // this for a sample period
-                  //                logger.debug("Typed something since the last check");
-                } else if (
-                  (System.currentTimeMillis() - lastTimeStamp) < (2 * CHECK_PERIOD)) {
-                  // they stopped typing recently, but have stopped for at least
-                  // 1 sample period. lets apply the filter
-                  //                logger.debug("Typed something recently applying filter");
-                  if (!(textFeld.getText().trim().equals(lastText.trim()))) {
-                    lastText = textFeld.getText();
-                    EventQueue.invokeLater(DelayedTextDocumentListener.this::setFilter);
+                    if (
+                      (System.currentTimeMillis() - lastTimeStamp) < CHECK_PERIOD) {
+                      // They typed something since the last check. we ignor
+                      // this for a sample period
+                      //                logger.debug("Typed something since the last check");
+                    } else if (
+                      (System.currentTimeMillis() - lastTimeStamp) < (2 * CHECK_PERIOD)) {
+                      // they stopped typing recently, but have stopped for at least
+                      // 1 sample period. lets apply the filter
+                      //                logger.debug("Typed something recently applying filter");
+                      if (!(textFeld.getText().trim().equals(lastText.trim()))) {
+                        lastText = textFeld.getText();
+                        EventQueue.invokeLater(DelayedTextDocumentListener.this::setFilter);
+                      }
+                    } else {
+                      // they stopped typing a while ago, let's forget about it
+                      //                logger.debug(
+                      //                  "They stoppped typing a while ago, assuming filter has been applied");
+                    }
                   }
-                } else {
-                  // they stopped typing a while ago, let's forget about it
-                  //                logger.debug(
-                  //                  "They stoppped typing a while ago, assuming filter has been applied");
-                }
-              }
-            }
-          });
+                });
 
       delayThread.setPriority(Thread.MIN_PRIORITY);
       delayThread.start();
@@ -3653,14 +3525,12 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
 		          		final Document doc = detail.getEditorKit().createDefaultDocument();
 		          		detail.getEditorKit().read(new StringReader(buf.toString()), doc, 0);
 
-				      	SwingHelper.invokeOnEDT(new Runnable() {
-				      		public void run() {
-				      			detail.setDocument(doc);
-                                JTextComponentFormatter.applySystemFontAndSize(detail);
-				      			detail.setCaretPosition(0);
-                                lastRow = selectedRow;
-				      		}
-				      	});
+				      	SwingHelper.invokeOnEDT(() -> {
+                              detail.setDocument(doc);
+JTextComponentFormatter.applySystemFontAndSize(detail);
+                              detail.setCaretPosition(0);
+lastRow = selectedRow;
+                          });
 		          	} catch (Exception e) {}
 	      		}
 	        }
@@ -3670,14 +3540,12 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
           	try {
           		final Document doc = detail.getEditorKit().createDefaultDocument();
           		detail.getEditorKit().read(new StringReader("<html>Nothing selected</html>"), doc, 0);
-		      	SwingHelper.invokeOnEDT(new Runnable() {
-		      		public void run() {
-		      			detail.setDocument(doc);
-                        JTextComponentFormatter.applySystemFontAndSize(detail);
-		      			detail.setCaretPosition(0);
-                        lastRow = selectedRow;
-		      		}
-		      	});
+		      	SwingHelper.invokeOnEDT(() -> {
+                      detail.setDocument(doc);
+JTextComponentFormatter.applySystemFontAndSize(detail);
+                      detail.setCaretPosition(0);
+lastRow = selectedRow;
+                  });
           	} catch (Exception e) {}
   		}
     }
@@ -3689,11 +3557,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
      */
     public void propertyChange(PropertyChangeEvent arg0) {
       SwingUtilities.invokeLater(
-        new Runnable() {
-          public void run() {
-            updateDetailPane(true);
-          }
-        });
+              () -> updateDetailPane(true));
     }
   }
     private class ThrowableDisplayMouseAdapter extends MouseAdapter {
@@ -3738,11 +3602,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
               }
 
                   detailArea.setText(buf.toString());
-                  SwingHelper.invokeOnEDT(new Runnable() {
-                    public void run() {
-                      centerAndSetVisible(detailDialog);
-                    }
-                  });
+                  SwingHelper.invokeOnEDT(() -> centerAndSetVisible(detailDialog));
                 }
         }
     }
@@ -4065,109 +3925,106 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
                 }
             });
 
-            tableModel.addTableModelListener(new TableModelListener(){
-                public void tableChanged(TableModelEvent e) {
-                    int firstRow = e.getFirstRow();
-                    //lastRow may be Integer.MAX_VALUE..if so, set lastRow to rowcount - 1 (so rowcount may be negative here, which will bypass for loops below)
-                    int lastRow = Math.min(e.getLastRow(), table.getRowCount() - 1);
-                    //clear everything if we got an event w/-1 for first or last row
-                    if (firstRow < 0 || lastRow < 0) {
-                        primaryList.clear();
-                        secondaryList.clear();
-                    }
+            tableModel.addTableModelListener(e -> {
+                int firstRow = e.getFirstRow();
+                //lastRow may be Integer.MAX_VALUE..if so, set lastRow to rowcount - 1 (so rowcount may be negative here, which will bypass for loops below)
+                int lastRow = Math.min(e.getLastRow(), table.getRowCount() - 1);
+                //clear everything if we got an event w/-1 for first or last row
+                if (firstRow < 0 || lastRow < 0) {
+                    primaryList.clear();
+                    secondaryList.clear();
+                }
 
 //                    System.out.println("lastRow: " + lastRow + ", first row: " + firstRow + ", original last row: " + e.getLastRow() + ", type: " + e.getType());
 
-                    List displayedEvents = tableModel.getFilteredEvents();
-                    if (e.getType() == TableModelEvent.INSERT) {
+                List displayedEvents = tableModel.getFilteredEvents();
+                if (e.getType() == TableModelEvent.INSERT) {
 //                        System.out.println("insert - current warnings: " + warnings.size() + ", errors: " + errors.size() + ", first row: " + firstRow + ", last row: " + lastRow);
-                        for (int i=firstRow;i<lastRow;i++) {
-                            LoggingEventWrapper event = (LoggingEventWrapper)displayedEvents.get(i);
-                            ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, event);
-                            if (secondaryMatches(wrapper)) {
-                                secondaryList.add(wrapper);
+                    for (int i=firstRow;i<lastRow;i++) {
+                        LoggingEventWrapper event = (LoggingEventWrapper)displayedEvents.get(i);
+                        ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, event);
+                        if (secondaryMatches(wrapper)) {
+                            secondaryList.add(wrapper);
 //                                System.out.println("added warning: " + i + " - " + event.getLevel());
-                            }
-                            if (primaryMatches(wrapper)) {
-                                //add to this one
-                                primaryList.add(wrapper);
-                            }
-//                                System.out.println("added error: " + i + " - " + event.getLevel());
                         }
+                        if (primaryMatches(wrapper)) {
+                            //add to this one
+                            primaryList.add(wrapper);
+                        }
+//                                System.out.println("added error: " + i + " - " + event.getLevel());
+                    }
 //                        System.out.println("insert- new warnings: " + warnings + ", errors: " + errors);
 
-                        //run evaluation on rows & add to list
-                    } else if (e.getType() == TableModelEvent.DELETE) {
-                        //find each eventwrapper with an id in the deleted range and remove it...
+                    //run evaluation on rows & add to list
+                } else if (e.getType() == TableModelEvent.DELETE) {
+                    //find each eventwrapper with an id in the deleted range and remove it...
 //                        System.out.println("delete- current warnings: " + warnings.size() + ", errors: " + errors.size() + ", first row: " + firstRow + ", last row: " + lastRow + ", displayed event count: " + displayedEvents.size() );
-                        for (Iterator iter = secondaryList.iterator();iter.hasNext();) {
-                            ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
-                            if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
+                    for (Iterator iter = secondaryList.iterator();iter.hasNext();) {
+                        ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
+                        if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
 //                                System.out.println("deleting find: " + wrapper);
-                                iter.remove();
-                            }
+                            iter.remove();
                         }
-                        for (Iterator iter = primaryList.iterator();iter.hasNext();) {
-                            ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
-                            if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
+                    }
+                    for (Iterator iter = primaryList.iterator();iter.hasNext();) {
+                        ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
+                        if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
 //                                System.out.println("deleting error: " + wrapper);
-                                iter.remove();
-                            }
+                            iter.remove();
                         }
+                    }
 //                        System.out.println("delete- new warnings: " + warnings.size() + ", errors: " + errors.size());
 
-                        //remove any matching rows
-                    } else if (e.getType() == TableModelEvent.UPDATE) {
+                    //remove any matching rows
+                } else if (e.getType() == TableModelEvent.UPDATE) {
 //                        System.out.println("update - about to delete old warnings in range: " + firstRow + " to " + lastRow + ", current warnings: " + warnings.size() + ", errors: " + errors.size());
-                        //find each eventwrapper with an id in the deleted range and remove it...
-                        for (Iterator iter = secondaryList.iterator();iter.hasNext();) {
-                            ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
-                            if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
+                    //find each eventwrapper with an id in the deleted range and remove it...
+                    for (Iterator iter = secondaryList.iterator();iter.hasNext();) {
+                        ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
+                        if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
 //                                System.out.println("update - deleting warning: " + wrapper);
-                                iter.remove();
-                            }
+                            iter.remove();
                         }
-                        for (Iterator iter = primaryList.iterator();iter.hasNext();) {
-                            ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
-                            if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
+                    }
+                    for (Iterator iter = primaryList.iterator();iter.hasNext();) {
+                        ThumbnailLoggingEventWrapper wrapper = (ThumbnailLoggingEventWrapper)iter.next();
+                        if ((wrapper.rowNum >= firstRow) && (wrapper.rowNum <= lastRow)) {
 //                                System.out.println("update - deleting error: " + wrapper);
-                                iter.remove();
-                            }
+                            iter.remove();
                         }
+                    }
 //                        System.out.println("update - after deleting old warnings in range: " + firstRow + " to " + lastRow + ", new warnings: " + warnings.size() + ", errors: " + errors.size());
-                        //NOTE: for update, we need to do i<= lastRow
-                        for (int i=firstRow;i<=lastRow;i++) {
-                            LoggingEventWrapper event = (LoggingEventWrapper)displayedEvents.get(i);
-                            ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, event);
+                    //NOTE: for update, we need to do i<= lastRow
+                    for (int i=firstRow;i<=lastRow;i++) {
+                        LoggingEventWrapper event = (LoggingEventWrapper)displayedEvents.get(i);
+                        ThumbnailLoggingEventWrapper wrapper = new ThumbnailLoggingEventWrapper(i, event);
 //                                System.out.println("update - adding error: " + i + ", event: " + event.getMessage());
-                            //only add event to thumbnail if there is a color
-                            if (primaryMatches(wrapper)) {
-                                //!wrapper.loggingEvent.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
-                                primaryList.add(wrapper);
-                            } else {
-                                primaryList.remove(wrapper);
-                            }
-
-                            if (secondaryMatches(wrapper)) {
-                                //event.isSearchMatch())
+                        //only add event to thumbnail if there is a color
+                        if (primaryMatches(wrapper)) {
+                            //!wrapper.loggingEvent.getColorRuleBackground().equals(ChainsawConstants.COLOR_DEFAULT_BACKGROUND)
+                            primaryList.add(wrapper);
+                        } else {
+                            primaryList.remove(wrapper);
+                        }
+
+                        if (secondaryMatches(wrapper)) {
+                            //event.isSearchMatch())
 //                                System.out.println("update - adding marker: " + i + ", event: " + event.getMessage());
-                                secondaryList.add(wrapper);
-                            } else {
-                                secondaryList.remove(wrapper);
-                            }
+                            secondaryList.add(wrapper);
+                        } else {
+                            secondaryList.remove(wrapper);
                         }
-//                        System.out.println("update - new warnings: " + warnings.size() + ", errors: " + errors.size());
                     }
-                    revalidate();
-                    repaint();
-                    //run this in an invokeLater block to ensure this action is enqueued to the end of the EDT
-                    EventQueue.invokeLater(new Runnable() {
-                    public void run() {
-                      if (isScrollToBottom()) {
-                          scrollToBottom();
-                      }
-                    }});
+//                        System.out.println("update - new warnings: " + warnings.size() + ", errors: " + errors.size());
                 }
+                revalidate();
+                repaint();
+                //run this in an invokeLater block to ensure this action is enqueued to the end of the EDT
+                EventQueue.invokeLater(() -> {
+                  if (isScrollToBottom()) {
+                    scrollToBottom();
+                  }
+                });
             });
         }
 
@@ -4506,11 +4363,7 @@ public class LogPanel extends DockablePanel implements EventBatchListener, Profi
     public ToggleToolTips() {
       super("Show ToolTips", new ImageIcon(ChainsawIcons.TOOL_TIP));
   addActionListener(
-    new ActionListener() {
-      public void actionPerformed(ActionEvent evt) {
-        preferenceModel.setToolTips(isSelected());
-      }
-    });
+          evt -> preferenceModel.setToolTips(isSelected()));
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/logging-chainsaw/blob/25eb0012/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java b/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java
index eb1a495..f0fbc47 100644
--- a/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java
+++ b/src/main/java/org/apache/log4j/chainsaw/LogPanelLoggerTreeModel.java
@@ -56,11 +56,7 @@ class LogPanelLoggerTreeModel extends DefaultTreeModel
   public void loggerNameAdded(final String loggerName) {
     //invoke later, not on current EDT
     SwingUtilities.invokeLater(
-      new Runnable() {
-        public void run() {
-          addLoggerNameInDispatchThread(loggerName);
-        }
-      });
+            () -> addLoggerNameInDispatchThread(loggerName));
   }
 
   public void reset() {
@@ -181,11 +177,7 @@ outerFor:
 
   private static class LogPanelTreeNode extends DefaultMutableTreeNode {
     protected static Comparator nodeComparator =
-      new Comparator() {
-        public int compare(Object o1, Object o2) {
-          return o1.toString().compareToIgnoreCase(o2.toString());
-        }
-      };
+            (o1, o2) -> o1.toString().compareToIgnoreCase(o2.toString());
 
     private LogPanelTreeNode(String logName) {
       super(logName);