例えばこんな感じだ

最終的な処理がより複雑になりコードが長くなった場合
わかりにくいコードになってしまう点は否定できないのだが

public class Main extends JFrame {
 
 JPopupMenu pm = new JPopupMenu(); //C
 
 Main() {
  setSize(100, 100);
  setLocationRelativeTo(null);

  addMouseListener( //@
   new MouseListener() { //A+B
    public void mouseClicked(MouseEvent e) {
     if(SwingUtilities.isRightMouseButton(e)) {
      pm.show(e.getComponent(), e.getX(), e.getY());
     }      
    }
    public void mousePressed(MouseEvent e) {}
    public void mouseReleased(MouseEvent e) {}
    public void mouseEntered(MouseEvent e) {}
    public void mouseExited(MouseEvent e) {}
   }
  );
  
  JMenuItem mi = new JMenuItem("閉じる"); //E
  mi.addActionListener( //F
   new ActionListener() { //G+H
    public void actionPerformed(ActionEvent e) {
      System.exit(0);
  }});
  pm.add(mi); //D
  
  JMenuItem mi2 = new JMenuItem("サイズを大きくする"); //E
  mi2.addActionListener( //F
   new ActionListener() { //G+H
    public void actionPerformed(ActionEvent e) {
      setSize(300, 300);
  }});
  pm.add(mi2); //D
  
 }
 public static void main(String[] args) {
  Main ma = new Main();
  ma.setVisible(true);
 }
}