title: How should I organize my Java GUI?
body: <p>I'm creating a game in Java for fun and I'm trying to decide how to organize my classes for the GUI. So far, all the classes with only the swing components and layout (no logic) are in a package called "ui". I now need to add listeners (i.e. ActionListener) to components (i.e. button). The listeners need to communicate with the Game class.</p>
  
  <p>Currently I have:
     Game.java - creates the frame add panels to it</p>
  
  <pre><code>import javax.swing.*;
  import ui.*;
  
  public class Game {
  
      private JFrame frame;
      Main main;
  
      Rules rules;
  
      Game() {
          rules = new Rules();
  
          frame = new JFrame();
          frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
          main = new Main();
          frame.setContentPane(main.getContentPane());
          show();
      }
  
      void show() {
          frame.pack();
          frame.setLocationRelativeTo(null);
          frame.setVisible(true);
      }
  
      public static void main(String[] args) { new Game(); }
  
  }
  </code></pre>
  
  <p>Rules.java - game logic</p>
  
  <p>ui package - all classes create new panels to be swapped out with the main frame's content pane
        Main.java (Main Menu) - creates a panel with components</p>
  
  <p>Where do I now place the functionality for the Main class? In the game class? Separate class? Or is the whole organization wrong?</p>
  
  <p>Thanks</p>