我有一个opengl程序,我想在其中放一个文本框/区域,但是我不确定在我的opengl窗口中是否有办法做到这一点。有什么方法可以执行此操作或将其嵌入或可能将opengl窗口嵌入到JFrame中吗?
最佳答案
当然,有一种方法-您可以编写自己的呈现给OpenGL的GUI元素。至于是否可以将其嵌入到JFrame中-这取决于您正在使用的库,在LWJGL中,您可以使用Display.setParent进行此操作-需要awt.Canvas,我不知道您是否可以使用Swing组件获得一个。
我认为可以这样做:
import java.awt.Canvas;
import javax.swing.JFrame;
import javax.swing.JTextField;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.GL11;
public class CanvasTest {
public static void main(String[] args) throws LWJGLException, InterruptedException {
// note that this is a very bare bones
// proof-of-concept thing. You'd want to
// install your own close handlers etc here.
Canvas openglSurface = new Canvas();
JFrame frame = new JFrame();
frame.setSize(800, 800);
frame.add(openglSurface);
frame.setVisible(true);
frame.add(new JTextField("Hello World!"));
openglSurface.setSize(500, 500);
Display.setParent(openglSurface);
Display.create();
GL11.glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
Display.update();
Thread.sleep(2000);
Display.destroy();
}
}
我实际上没有尝试过此操作,因为我自己从来不需要此操作,但是它应该可以工作。
注意:我现在尝试了。它确实可以工作,但显然需要一些额外的工作才能使其与LayoutManagers等一起使用。
关于java - 如何将GUI组件放入OpenGL屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13145697/