Appendix 4: Swing/AWT integration

Env3D is based on the LWJGL library ( LWJGL provides a way to integrate an opengl window into an AWT Canvas. We will be using the LWJGL's AWT Canvas technique as follows:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

// Must import the lwjgl Display class
import org.lwjgl.opengl.Display;

public class UI
    private Game game;
    public UI() 
        JFrame frame = new JFrame();        
        // The exit button.
        JButton button = new JButton("Exit");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent event) {
        // Create a new canvas and set its size.
        Canvas canvas = new Canvas();
        // Must be 640*480 to match the size of an Env3D window
        canvas.setSize(640, 480);
        // This is the magic!  The setParent method attaches the 
        // opengl window to the awt canvas.
        try {
        } catch (Exception e) {
        // Construct the GUI as normal
        frame.add(button, BorderLayout.NORTH);
        frame.add(canvas, BorderLayout.CENTER);
        // Make sure you run the game, which 
        // executes on a separate thread.
        game = new Game();;
    public static void main(String args[]) 
        new UI();