/******************************************************************************* | |
* Copyright 2011 See AUTHORS file. | |
* | |
* Licensed under the Apache License, Version 2.0 (the "License"); | |
* you may not use this file except in compliance with the License. | |
* You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
******************************************************************************/ | |
package com.badlogic.gdx.tests.lwjgl; | |
import java.awt.BorderLayout; | |
import java.awt.Container; | |
import javax.swing.JFrame; | |
import javax.swing.SwingUtilities; | |
import com.badlogic.gdx.ApplicationAdapter; | |
import com.badlogic.gdx.Gdx; | |
import com.badlogic.gdx.backends.lwjgl.LwjglAWTCanvas; | |
import com.badlogic.gdx.graphics.GL20; | |
import com.badlogic.gdx.graphics.g2d.BitmapFont; | |
import com.badlogic.gdx.graphics.g2d.SpriteBatch; | |
import com.badlogic.gdx.tests.AnimationTest; | |
import com.badlogic.gdx.tests.MusicTest; | |
import com.badlogic.gdx.tests.UITest; | |
/** Demonstrates how to use LwjglAWTCanvas to have multiple GL widgets in a Swing application. | |
* @author mzechner */ | |
public class SwingLwjglTest extends JFrame { | |
LwjglAWTCanvas canvas1; | |
LwjglAWTCanvas canvas2; | |
LwjglAWTCanvas canvas3; | |
public SwingLwjglTest () { | |
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); | |
Container container = getContentPane(); | |
canvas1 = new LwjglAWTCanvas(new MusicTest()); | |
canvas2 = new LwjglAWTCanvas(new UITest(), canvas1); | |
canvas3 = new LwjglAWTCanvas(new WindowCreator(), canvas1); | |
canvas1.getCanvas().setSize(200, 480); | |
canvas2.getCanvas().setSize(200, 480); | |
canvas3.getCanvas().setSize(200, 480); | |
container.add(canvas1.getCanvas(), BorderLayout.LINE_START); | |
container.add(canvas2.getCanvas(), BorderLayout.CENTER); | |
container.add(canvas3.getCanvas(), BorderLayout.LINE_END); | |
pack(); | |
setVisible(true); | |
setSize(800, 480); | |
} | |
class WindowCreator extends ApplicationAdapter { | |
SpriteBatch batch; | |
BitmapFont font; | |
@Override | |
public void create () { | |
batch = new SpriteBatch(); | |
font = new BitmapFont(); | |
} | |
@Override | |
public void dispose () { | |
font.dispose(); | |
batch.dispose(); | |
} | |
@Override | |
public void render () { | |
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); | |
batch.begin(); | |
font.draw(batch, "Click to create a new window", 10, 100); | |
batch.end(); | |
if (Gdx.input.justTouched()) { | |
createWindow(); | |
} | |
} | |
private void createWindow () { | |
JFrame window = new JFrame(); | |
LwjglAWTCanvas canvas = new LwjglAWTCanvas(new UITest(), canvas1); | |
window.getContentPane().add(canvas.getCanvas(), BorderLayout.CENTER); | |
window.pack(); | |
window.setVisible(true); | |
window.setSize(200, 200); | |
} | |
} | |
public static void main (String[] args) { | |
SwingUtilities.invokeLater(new Runnable() { | |
@Override | |
public void run () { | |
new SwingLwjglTest(); | |
} | |
}); | |
} | |
@Override | |
public void dispose() { | |
canvas3.stop(); | |
canvas2.stop(); | |
canvas1.stop(); | |
super.dispose(); | |
} | |
} |