View Javadoc
1   /*******************************************************************************
2    * Copyhacked (H) 2012-2025.
3    * This program and the accompanying materials
4    * are made available under no term at all, use it like
5    * you want, but share and discuss it
6    * every time possible with every body.
7    *
8    * Contributors:
9    *      ron190 at ymail dot com - initial implementation
10   *******************************************************************************/
11  package com.jsql.view.swing.text;
12  
13  import com.jsql.view.swing.popupmenu.JPopupMenuComponent;
14  
15  import javax.swing.*;
16  import javax.swing.text.JTextComponent;
17  import java.awt.event.MouseAdapter;
18  import java.awt.event.MouseEvent;
19  
20  /**
21   * Add a popup menu to Decorated component.
22   * @param <T> Component like JTextField or JTextArea to decorate
23   */
24  public class JPopupComponent<T extends JTextComponent> extends JComponent implements DecoratorJComponent<T> {
25      
26      /**
27       * Decorated component.
28       */
29      private final T proxy;
30  
31      /**
32       * Get the decorated component, add popup menu Select All and Copy.
33       * @param proxy Swing component to decorate
34       */
35      public JPopupComponent(final T proxy) {
36          this.proxy = proxy;
37          this.proxy.setComponentPopupMenu(new JPopupMenuComponent(this.proxy));
38          this.proxy.addMouseListener(new MouseAdapter() {
39              @Override
40              public void mousePressed(MouseEvent e) {
41                  super.mousePressed(e);
42                  // Left button will unselect text after selectAll, so only for right click
43                  if (SwingUtilities.isRightMouseButton(e)) {
44                      JPopupComponent.this.proxy.requestFocusInWindow();
45                  }
46              }
47          });
48      }
49  
50      @Override
51      public T getProxy() {
52          return this.proxy;
53      }
54  }