В настоящее время я изучаю JOGL, и я попытался написать программу, которая позволяет пользователю выбирать, какой тип фигуры он хочет нарисовать в окне.Я уже нашел альтернативное решение, которое заключалось бы в том, чтобы поместить все виды фигур в разные классы, а не только в один.Затем спросите пользователя, какую фигуру добавить в GLJPanel.
Но я все еще хочу понять, почему я столкнулся с этой проблемой и как я могу ее исправить (кроме того, что я описал выше)
Восновной: общие вещи, которые должна делать программа JOGL, println предназначены для отладки.
На дисплее:
-Только «был здесь» в display () печатает дважды в консоли, вероятно, доказывая, что метод отображения фактически вызывается дважды
- я пытаюсь получить значение из JOPtionPane , используя его showInputDialog method.
-Я пытался установить логическое значение ' onetime ', чтобы метод отображения дважды не вызывал JOptionPane , но это не решило проблему
import java.awt.Color;
import javax.media.opengl.*;
import javax.media.opengl.awt.GLJPanel;
import javax.swing.*;
public class Debug {
public static void main(String[] args)
{
SwingUtilities.invokeLater(new Runnable(){
public void run()
{
GLProfile p = GLProfile.get(GLProfile.GL2);
GLCapabilities c = new GLCapabilities(p);
GLJPanel gljp2 = new GLJPanel(c); //Remplacable par GLCanvas(c);
gljp2.setSize(800, 800);
gljp2.setBackground(Color.white);
System.out.println("SD0");
Shape shp = new Shape();
System.out.println("SD1");
gljp2.addGLEventListener(shp);
System.out.println("SD2");
do{
JFrame fen = new JFrame("Basic Frame");
shp.setOnetime(true);
fen.getContentPane().add(gljp2);
System.out.println("SD3");
fen.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
fen.setSize(800, 800);
fen.setVisible(true);
}while("c".equals(JOptionPane.showInputDialog(null,"Type c to continue")));
}});
}
}
class Shape implements GLEventListener
{
private static boolean onetime = true;
private int choice;
@Override
public void init(GLAutoDrawable drawable) {
}
@Override
public void display(GLAutoDrawable drawable)
{
System.out.println("Has been here");
final GL2 gl = drawable.getGL().getGL2();
if(onetime)
{
choice = Integer.parseInt(JOptionPane.showInputDialog(null, "Choice :\n\t1>Line\n\t2>Triangle"));
onetime=false;
switch(choice)
{
case 1:
gl.glBegin(GL2.GL_LINES);
gl.glVertex3f(-0.50f, -0.50f, 0);
gl.glVertex3f(0.50f, 0.50f, 0);
gl.glEnd();
break;
case 2:
//drawing the base
gl.glBegin(GL2.GL_LINES);
gl.glVertex3f(-0.50f, -0.50f, 0);
gl.glVertex3f(0.50f, -0.50f, 0);
gl.glEnd();
//drawing the right edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex3f(0f, 0.50f, 0);
gl.glVertex3f(-0.50f, -0.50f, 0);
gl.glEnd();
//drawing the lft edge
gl.glBegin(GL2.GL_LINES);
gl.glVertex3f(0f, 0.50f, 0);
gl.glVertex3f(0.50f, -0.50f, 0);
gl.glEnd();
gl.glFlush();
break;
default:
JOptionPane.showMessageDialog(null, "Entrée incorrecte, réessayez");
System.exit(1);
}
}
}
//Next is irrelevant (getter and setters) so I havent included it here
}