refactored events listeners + renamed Help to Constants + moved files

This commit is contained in:
Quentin Legot 2021-02-11 23:02:15 +01:00
parent 338b44f007
commit 33db153302
6 changed files with 98 additions and 108 deletions

View File

@ -1,61 +0,0 @@
package jogl;
public class Help{
public Help() {
}
public String getHelp() {
String help = "Alphabet{X,Y,Z}\r\n"
+ "\r\n"
+ "\r\n"
+ "Structure d'une requête:\r\n"
+ "\r\n"
+ "{\r\n"
+ " Axiom = Lettre ;\r\n"
+ " 1ère expression ;\r\n"
+ " 2nde expression ;\r\n"
+ " It = Nb d'itérations;\r\n"
+ "}\r\n"
+ "\r\n"
+ "\r\n"
+ "Une lettre de l'alphabet = avance d'une unité dans une direction.\r\n"
+ "Exemple:\r\n"
+ "\r\n"
+ " X -> avance d'une unité sur l'axe X\r\n"
+ " 0.25X -> avance de 0.25 unité sur l'axe X\r\n"
+ " 12Z -> avance de 12 unités sur l'axe Z\r\n"
+ "\r\n"
+ "On peut combiner les directions:\r\n"
+ "Exemple:\r\n"
+ " \r\n"
+ " X=Y -> avance d'une unité sur l'axe X et une sur l'axe Y\r\n"
+ " 2Y3X0.3Z -> avance de deux unités sur l'axe Y,\r\n"
+ " de trois unités sur l'axe X\r\n"
+ " de 0.3 unités sur l'axe Z.\r\n"
+ "\r\n"
+ "Les expressions sont de la forme {X = 2X0.2YZ}\r\n"
+ "\r\n"
+ "On pourra changer de direction avec l'alphabet{x,y,z}\r\n"
+ "x y et z font par défault une rotation de 45° autour de leur axe.\r\n"
+ "Exemple:\r\n"
+ " x = 45°\r\n"
+ " 2x = 90°\r\n"
+ "\r\n"
+ "Ainsi on pourra écrire:\r\n"
+ "\r\n"
+ " X = X2y0.2Z0.2x\r\n"
+ "\r\n"
+ "On pourra ajouter plus tard ce qui suit :\r\n"
+ "\r\n"
+ "On peut ajouter le principe d'ouverture et de fermeture des branches aux expressions,\r\n"
+ "on utilisera donc pour ce faire les \"[ ]\".\r\n"
+ "\r\n"
+ "Ainsi, dans l'expression: {X = [X]+Y}\r\n"
+ "\r\n"
+ "On exécutera d'abord l'instruction entre crochets, puis, une fois son nombre maximum d'itérations\r\n"
+ "atteint, on ajoutera un mouvement Y.";
return help;
}
}

View File

@ -0,0 +1,57 @@
package lsystem.screen;
public class Constants {
public static final int WIDTH = 600;
public static final int HEIGHT = 400;
public static final String HELP = "Alphabet{X,Y,Z}\r\n"
+ "\r\n"
+ "\r\n"
+ "Structure d'une requête:\r\n"
+ "\r\n"
+ "{\r\n"
+ " Axiom = Lettre ;\r\n"
+ " 1ère expression ;\r\n"
+ " 2nde expression ;\r\n"
+ " It = Nb d'itérations;\r\n"
+ "}\r\n"
+ "\r\n"
+ "\r\n"
+ "Une lettre de l'alphabet = avance d'une unité dans une direction.\r\n"
+ "Exemple:\r\n"
+ "\r\n"
+ " X -> avance d'une unité sur l'axe X\r\n"
+ " 0.25X -> avance de 0.25 unité sur l'axe X\r\n"
+ " 12Z -> avance de 12 unités sur l'axe Z\r\n"
+ "\r\n"
+ "On peut combiner les directions:\r\n"
+ "Exemple:\r\n"
+ " \r\n"
+ " X=Y -> avance d'une unité sur l'axe X et une sur l'axe Y\r\n"
+ " 2Y3X0.3Z -> avance de deux unités sur l'axe Y,\r\n"
+ " de trois unités sur l'axe X\r\n"
+ " de 0.3 unités sur l'axe Z.\r\n"
+ "\r\n"
+ "Les expressions sont de la forme {X = 2X0.2YZ}\r\n"
+ "\r\n"
+ "On pourra changer de direction avec l'alphabet{x,y,z}\r\n"
+ "x y et z font par défault une rotation de 45° autour de leur axe.\r\n"
+ "Exemple:\r\n"
+ " x = 45°\r\n"
+ " 2x = 90°\r\n"
+ "\r\n"
+ "Ainsi on pourra écrire:\r\n"
+ "\r\n"
+ " X = X2y0.2Z0.2x\r\n"
+ "\r\n"
+ "On pourra ajouter plus tard ce qui suit :\r\n"
+ "\r\n"
+ "On peut ajouter le principe d'ouverture et de fermeture des branches aux expressions,\r\n"
+ "on utilisera donc pour ce faire les \"[ ]\".\r\n"
+ "\r\n"
+ "Ainsi, dans l'expression: {X = [X]+Y}\r\n"
+ "\r\n"
+ "On exécutera d'abord l'instruction entre crochets, puis, une fois son nombre maximum d'itérations\r\n"
+ "atteint, on ajoutera un mouvement Y.";
}

View File

@ -1,4 +1,4 @@
package jogl; package lsystem.screen;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
@ -18,34 +18,24 @@ import com.jogamp.opengl.util.Animator;
* *
*/ */
public class Article1 implements GLEventListener { public class Jogl implements GLEventListener {
public static void main(String[] args) { public static void initialize(String[] args) {
// Création de la fenêtre // Création de la fenêtre
Frame frame = new Frame("Article1"); Frame frame = new Frame("L-système 3D");
// Création du canvas pour dessiner dessus // Création du canvas pour dessiner dessus
GLCanvas canvas = new GLCanvas(); GLCanvas canvas = new GLCanvas();
// Nous attachons ensuite le méchanisme de callback à notre surface dessinable // Nous attachons ensuite le méchanisme de callback à notre surface dessinable
canvas.addGLEventListener((GLEventListener) new Article1()); canvas.addGLEventListener((GLEventListener) new Jogl());
// dessin -> fenêtre // dessin -> fenêtre
frame.add(canvas); frame.add(canvas);
// Création de l'animator // Création de l'animator
final Animator animator = new Animator(canvas); final Animator animator = new Animator(canvas);
// croix rouge = fermeture de la fenêtre // croix rouge = fermeture de la fenêtre
frame.addWindowListener(new WindowAdapter() { frame.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) { public void windowClosing(WindowEvent e) {
// Thread pour arrêter l'animator avant la fenêtre // Thread pour arrêter l'animator avant la fenêtre
new Thread(new Runnable() { new Thread(animator::stop).start();
public void run() {
animator.stop();
System.exit(0);
}
}).start();
} }
}); });
@ -60,15 +50,12 @@ public class Article1 implements GLEventListener {
// init() sera appelée une fois au début de l'animation. C'est dans cette méthode // init() sera appelée une fois au début de l'animation. C'est dans cette méthode
// que nous nous chargerons de toutes les opérations d'initialisation // que nous nous chargerons de toutes les opérations d'initialisation
public void init(GLAutoDrawable drawable) { public void init(GLAutoDrawable drawable) {
// GLEventListener renvoie un contexte (drawable) // GLEventListener renvoie un contexte (drawable)
// que nous allons utiliser pour instancier un objet de type GL // que nous allons utiliser pour instancier un objet de type GL
// qui nous permettra d'utiliser les fonctions OpenGL // qui nous permettra d'utiliser les fonctions OpenGL
GL gl = drawable.getGL(); GL gl = drawable.getGL();
// désactiver la synchronisation verticale indépendamment de la plateforme utilisée // désactiver la synchronisation verticale indépendamment de la plateforme utilisée
gl.setSwapInterval(1); gl.setSwapInterval(1);
} }
// Appelée que si la fenêtre d'affichage est redimensionnée // Appelée que si la fenêtre d'affichage est redimensionnée

View File

@ -1,11 +1,12 @@
package jogl; package lsystem.screen;
import lsystem.screen.listener.HelpListener;
import lsystem.screen.listener.NewGenListener;
import java.awt.BorderLayout; import java.awt.BorderLayout;
import java.awt.FlowLayout; import java.awt.FlowLayout;
import java.awt.GridLayout; import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton; import javax.swing.JButton;
import javax.swing.JFrame; import javax.swing.JFrame;
@ -19,7 +20,7 @@ import javax.swing.JToolBar;
import javax.swing.SwingConstants; import javax.swing.SwingConstants;
public class MainFrame extends JFrame implements ActionListener{ public class MainFrame extends JFrame {
private static final long serialVersionUID = -7898079642230075807L; private static final long serialVersionUID = -7898079642230075807L;
@ -32,8 +33,6 @@ public class MainFrame extends JFrame implements ActionListener{
private int nbRules; private int nbRules;
public MainFrame(){ public MainFrame(){
nbRules = 1; nbRules = 1;
nbTabs = 0; nbTabs = 0;
basePanel = new JPanel(); basePanel = new JPanel();
@ -42,54 +41,40 @@ public class MainFrame extends JFrame implements ActionListener{
JToolBar toolBar = new JToolBar(); JToolBar toolBar = new JToolBar();
newGen = new JButton("Nouvelle génération"); newGen = new JButton("Nouvelle génération");
newGen.addActionListener(this); newGen.addActionListener(new NewGenListener());
toolBar.add(newGen); toolBar.add(newGen);
help = new JButton("Aide"); help = new JButton("Aide");
help.addActionListener(this); help.addActionListener(new HelpListener());
toolBar.add(help); toolBar.add(help);
this.setTitle("L-system interface"); this.setTitle("L-system interface");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(600,400); this.setSize(Constants.WIDTH, Constants.HEIGHT);
this.setLocationRelativeTo(null); this.setLocationRelativeTo(null);
this.add(tabs); this.add(tabs);
this.add(toolBar, BorderLayout.NORTH); this.add(toolBar, BorderLayout.NORTH);
} }
@Override
public void actionPerformed(ActionEvent e) {
if(e.getSource() == newGen)
newTab();
else if(e.getSource() == help)
newHelp();
else if(e.getSource() == close)
closeTab();
else
throw new Error("This event does not trigger any action");
}
public void newHelp() { public void newHelp() {
JPanel helpTab = new JPanel(); JPanel helpTab = new JPanel();
JTextArea helpText = new JTextArea(); JTextArea helpText = new JTextArea();
helpText.setText(Constants.HELP);
helpText.setEditable(false); helpText.setEditable(false);
helpText.setText(new Help().getHelp());
helpTab.add(helpText); helpTab.add(helpText);
tabs.addTab("Aide",(new JScrollPane(helpTab))); tabs.addTab("Aide",(new JScrollPane(helpTab)));
} }
public void newTab() { public void newTab() {
nbTabs ++; nbTabs ++;
JPanel tab = new JPanel(); JPanel tab = new JPanel();
JTextArea axiomList = new JTextArea(); JTextArea axiomList = new JTextArea();
axiomList.setEditable(false);
axiomList.setText("Axiome : \n"); axiomList.setText("Axiome : \n");
axiomList.setEditable(false);
JTextArea rulesList = new JTextArea(); JTextArea rulesList = new JTextArea();
rulesList.setEditable(false);
rulesList.setText("Règles : \n"); rulesList.setText("Règles : \n");
rulesList.setEditable(false);
JLabel axiome = new JLabel("Axiome"); JLabel axiome = new JLabel("Axiome");
JLabel rules = new JLabel("Règle "+ nbRules); JLabel rules = new JLabel("Règle "+ nbRules);

View File

@ -0,0 +1,11 @@
package lsystem.screen.listener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class HelpListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
}
}

View File

@ -0,0 +1,11 @@
package lsystem.screen.listener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class NewGenListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
}
}