About this Tutorial

This tutorial will illustrate how to create the most simplistic networkable "game" using the GameFramework. I put game in quotes because this example is not really a game since it does nothing but enable the players to chat. But this is a good starting point.

The Chat Game

This tutorial takes advantage of the class net.mlw.gfw.client.DefaultClient . This abstract class can be used as a starting point for a swing client interface. Below is an an implementation of a game that extends net.mlw.gfw.client.DefaultClient . And below the source is an explanation of what is going on.

 1: import javax.swing.JFrame;
 2: import javax.swing.JMenu;
 3: import javax.swing.JMenuBar;
 4: import javax.swing.JMenuItem;
 5: import javax.swing.JPopupMenu;
 6: 
 7: import net.mlw.gfw.client.ClientContext;
 8: import net.mlw.gfw.client.DefaultClient;
 9: import net.mlw.gfw.ext.basic.action.NewGameActionListener;
10: import net.mlw.gfw.server.impl.DefaultServer;
11: 
12: public class Main extends DefaultClient
13: {
14:    protected final JMenuBar  menuBar         = new JMenuBar();
15:    protected final JMenu     menuGame        = menuBar.add(new JMenu("Game"));
16:    protected final JMenuItem menuFileNewGame = menuGame.add(new JMenuItem("New Game"));
17: 
18:    public final void init(final ClientContext clientContext)
19:    {
20:      setJMenuBar(menuBar);
21:      menuFileNewGame.addActionListener(
22:        new NewGameActionListener(this, server, DefaultServer.class,
23:                                  clientContext, clientEventHandler) );
24:    }
25:
26:    public static void main(String[] args)
27:    {
28:       JPopupMenu.setDefaultLightWeightPopupEnabled(false);
29:       Main sample = new Main();
30:       sample.initialize(new ClientContext());
31:       sample.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
32:       sample.setSize(340, 250);
33:       sample.setVisible(true);
34:    }
35: }
        
( source )

12: This class extends net.mlw.gfw.client.DefaultClient . See the javadoc or xref documentaton to see the details of what this class does.

14-16: A menu is created. This menu contains

Game
  New Game

18: The init(final ClientContext clientContext) method is the one abstract method that needs to be implemented. This method is called by the parents initialize(final ClientContext clientContext) method.

20: The JMenu is added to the DefaultClient which extends a JFrame.

21-23: The JMenu that was created on line 14 does nothing unless you add an ActionListener. The GameFramework has many ActionListener(s) available for use. One such ActionListener is the NewGameActionListener . Adding this ActionListener to the menuFileNewGame MenuItem will show the new server dialog when the item is clicked.

26: The public static void main(String[ ] args) method that is called from the command line.

28: I call JPopupMenu.setDefaultLightWeightPopupEnabled(false); which allows the AWT light-weight and the Swing heavy-weight components to get along ( javaalmanac ).

29: Create a new instance of this class. Remember this class extends net.mlw.gfw.client.DefaultClient .

30: Call the initialize method. This is required to enable the net.mlw.gfw.client.DefaultClient#61 to register all the listeners and componets.

31-33: Some standard Swing setup to view the JFrame.

Below is a screenshot of the results of running the above Sample. If you want to try it out yourself click on Java Web Start .

Congratulations you just made you fist networkable game using the GameFramework APIs.