试图混合Swing和LWJGL

时间:2014-11-08 13:28:33

标签: java swing lwjgl

我现在正在尝试将LWJGL和Swing混合在一起,所以我可以使用Swing的GUI和LWJGLS图形...但它不起作用,提前谢谢。

代码:

/**
 * 
 */
public static TSudioQE TSudio;
private static final long serialVersionUID = -8495077485468477943L;

public static void main(String[] args) {
    try {
        TSudioQE tsudio = new TSudioQE();
    } catch (LWJGLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public TSudioQE() throws LWJGLException {
    setTitle("TSudio Quall Engine 1X");
    JPanel p = new JPanel();

    Canvas c = new Canvas();

    Display.create();
    Display.setParent(c);

    GL11.glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);

    // set the color of the quad (R,G,B,A)
    GL11.glColor3f(0.5f, 0.5f, 1.0f);

    // draw quad
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glVertex2f(100, 100);
    GL11.glVertex2f(100 + 200, 100);
    GL11.glVertex2f(100 + 200, 100 + 200);
    GL11.glVertex2f(100, 100 + 200);
    GL11.glEnd();
    add(p);
    setSize(800, 460);
    setExtendedState(JFrame.MAXIMIZED_BOTH);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

@Override
public void windowOpened(WindowEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void windowClosing(WindowEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void windowClosed(WindowEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void windowIconified(WindowEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void windowDeiconified(WindowEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void windowActivated(WindowEvent e) {
    // TODO Auto-generated method stub

}

@Override
public void windowDeactivated(WindowEvent e) {
    // TODO Auto-generated method stub

}

我收到以下错误:

 org.lwjgl.LWJGLException: Parent.isDisplayable() must be true
at org.lwjgl.opengl.Display.createWindow(Display.java:301)
at org.lwjgl.opengl.Display.setParent(Display.java:451)
at qq.application.TSudioQE.<init>(TSudioQE.java:47)
at qq.application.TSudioQE.main(TSudioQE.java:33)

任何知道如何修复它的人?这可能很好。

度过美好的一天: - )

1 个答案:

答案 0 :(得分:1)

您设置为人机界面的画布必须可见:

JFrame frame = new JFrame();
Canvas canvas = new Canvas();
frame.add(canvas);
frame.setVisible(true);
try 
{
    Display.setParent(canvas);
    Display.create();
} 
catch (LWJGLException e) 
{
    e.printStackTrace();
}