1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429
| import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
class Editeur extends JFrame{//classe encapsulant toutes les autres
boolean modified = false;//détermine si l'utilisateur a modifié le circuit
Tamarre src = null;//la première amarre lors de la connection
Timage img = null;//l'objet transporté
Tobjet obj = null;//l'objet déposé sur le circuit
int nbConnect = 0;//nbre de connecteurs du Circuit, incrémenté chq fois qu'une connection est faite sur le circuit
int nbObj = 0;//nbre d'objets du Circuit, incrémenté chq fois qu'un objet est posé sur le circuit
Tconnect tab[];//liste des connecteurs du Circuit
Tobjet tobj[];//liste des objets du Circuit
int selConnect = -1;//indice qui permet de savoir quel connecteur est sélectionné
int selObj = -1;//indice qui permet de savoir quel objet est sélectionné
Tcircuit circus = null;//objet circuit
Portes Door = null;//objet des portes logiques
/*=======================================================================================================================================*/
public static int etat = 0; //Cette variable nous donne l'état dans lequel l'application se trouve
/**Description des differents états
*0 on attend rien
*1 attente du clic sur Tcircuit pour insertion d'une porte logique
*2 attente du clic sur Tcircuit pour insertion d'une variable logique
*3 attente du premier clic sur la carte pour selection de la source du connecteur
*4 dessin du connecteur(se fait dans Tcircuit)
*5 attente du second clic sur la carte pour selection de la destination du connecteur
*/
class Tobjet extends JLabel implements MouseMotionListener{
/** Description de la classe Tobjet
* elle encapsule les éléments qui constitueront le circuit
* ils sont posés sur un objet Tcircuit ==> Tcircuit l'instancie
*/
Tamarre gche = null,drte = null;
int id ;//Identifiant de l'objet
String type = null;//var,et,or,not,nor,nand,xor
Telement elt = null;
Tobjet(String adr_img,String type_objet){
super(new ImageIcon(adr_img));
type = type_objet;
elt = new Telement(type_objet);
id++;
}
Tobjet(String adr_img,String type_objet,int nbObj){
super(new ImageIcon(adr_img));
type = type_objet;
elt = new Telement(type_objet);
id = nbObj;
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
Rectangle esp = new Rectangle(circus.getBounds());
/*if((e.getX() <= esp.getX())&&(e.getY() <= esp.getY()))
setLocation(e.getX(),e.getY());*///assure le déplacement dans le circuit de l'objet posé sur le circuit
if(esp.contains(e.getPoint()))
setLocation(e.getX(),e.getY());
repaint();
}
public void paint(Graphics g) {
super.paint(g);
}
public Telement getElt(){
return elt;
}
public String getType(){
return type;
}
public int getId(){
return id;
}
}
class Telement extends Point implements MouseMotionListener{
/**Description de la classe Telement
* Cette classe encapsule le comportement de l'objet posé sur le circuit
*/
String type = null;
Telement(String type_objet){
type = type_objet;
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
//repaint();
}
public String getType(){
return type;
}
}
class Tamarre extends JLabel implements MouseListener{
/**Description de la classe Tamarre
*elle encapsule les points d'ancrages de l'objet de connection
*/
Tamarre() {
super();
}
public void mouseClicked(MouseEvent e){
if(SwingUtilities.isLeftMouseButton(e)){
if(etat == 0){//l'utilisateur veut connecter deux objets
src = this;
/*Instancier un objet de traçage avec pour source this*/
etat = 5;//dessiner le trait
}else if(etat == 5){//l'utilisateur vient de terminer la connection avec pour destination this
/*Instancier l'objet de connection avec pour source et destination src et this et detruire l'objet du trait*/
if(src==this)
JOptionPane.showMessageDialog(this, "Operation Erronée");
else{ tab[nbConnect] = new Tconnect(src,this,nbConnect);//Instancie l'objet de connection
nbConnect++;//Incrémente le compteur des connecteurs
etat = 0;//précise la fin de l'opération
}
}
}
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
if(etat != 1 )
setIcon(new ImageIcon("./images/boule.gif"));
}
public void mouseExited(MouseEvent e){
setIcon(null);
}
}
class Tconnect implements MouseListener {
/**Description de la classe Tconnect
*elle encapsule l'objet de connection entre deux amarres
*/
Tamarre src,dest;//représentent les points d'ancrages
int id;//représente l'id du connecteur
Tconnect(Tamarre src,Tamarre dest){
this.src = src;
this.dest = dest;
}
Tconnect(Tamarre src,Tamarre dest,int id){
this.src = src;
this.dest = dest;
this.id = id;
}
public Tamarre getSrc(){
return src;
}
public Tamarre getDest(){
return dest;
}
public void paint(Graphics g) {
g.drawLine(src.getX(),src.getY(),dest.getX(),dest.getY());
}
public void SelectMe(){
selConnect = id;
}
public void mouseClicked(MouseEvent e){
SelectMe();//sélection du connecteur
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mouseDragged(MouseEvent e) {
}
}
class Timage extends JLabel implements MouseMotionListener{
/**Description de la classe Timage
*elle encapsule les objets de transport de l'image
*/ String Type;
String adr_img;
AlphaComposite composite;
BufferedImage IMG = null;
Point location = new Point(0, 0);
Timage(String adr_img,String type){
super(new ImageIcon(adr_img));
this.Type = type;
this.adr_img = adr_img;
setOpaque(false);
composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f);
}
public void mouseMoved(MouseEvent e) {
Component c = e.getComponent();
BufferedImage image = new BufferedImage(c.getWidth(), c.getHeight(), BufferedImage.TYPE_INT_ARGB);
Graphics g = image.getGraphics();
c.paint(g);
//this.setLocation(e.getPoint());//assure le déplacement de l'image
}
public void mouseDragged(MouseEvent e) {
}
public String getType(){
return Type;
}
public String getImg(){
return adr_img;
}
public void paint(Graphics g) {
super.paint(g);
}
}
class TLabel extends JLabel implements MouseListener{
/**Description de la classe TLabel
*elle encapsule les objets de construction du circuit
*/
String Type = null;
String adr_img;
TLabel(String adr_img,String type){
super(new ImageIcon(adr_img));
this.Type = type;
this.adr_img = adr_img;
}
public String getType(){
return Type;
}
public String getImg(){
return adr_img;
}
public void mouseClicked(MouseEvent e){
etat = 1;//insertion d'une porte logique
img = new Timage(adr_img,Type);//instancie l'objet assurant le déplacement de l'image
}
public void mousePressed(MouseEvent e){
etat = 1;//insertion d'une porte logique
img = new Timage(adr_img,Type);//instancie l'objet assurant le déplacement de l'image
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mouseDragged(MouseEvent e) {
}
}
class Tools extends JPanel{
TLabel tab[];
Tools(String adr[],String type[]){
//gestionnaire de positionnement : alignement vertical
super();
BoxLayout bxl=new BoxLayout(this,BoxLayout.Y_AXIS);
setLayout(bxl);
for(int i=0;i<adr.length;i++){
tab[i] = new TLabel(adr[i],type[i]);
add(tab[i]);
}
}
}
class Portes extends JPanel{
/**Description de la classe Portes
*elle aide à construire l'interface avec les portes de bases ou composées en indiquant le chemin d'accès des portes logiques
*/
Tools outils = null;
Portes(boolean base){
super();
BoxLayout bxl=new BoxLayout(this,BoxLayout.Y_AXIS);
setLayout(bxl);
TLabel val = null;
String adr_img[] = {"","","","","","","","","","","","","","","","",""};
String type[] = {"","","","","","","","","","","","","","","","",""};
adr_img[0] = "./images/E-var.gif";type[0]="var";
if(base){//interface avec les portes de base
adr_img[1] = "./images/Bottom.gif";type[1]="0";
adr_img[2] = "./images/top.gif";type[2]="1";
adr_img[3] = "./images/E-and.gif";type[3]="and";
adr_img[4] = "./images/E-or.gif";type[4]="or";
adr_img[5] = "./images/E-invers.gif";type[5]="not";
}else{//interface avec les portes composées
adr_img[1] = "./images/Bottom.gif";type[1]="0";
adr_img[2] = "./images/top.gif";type[2]="1";
adr_img[3] = "./images/E-nand.gif";type[3]="nand";
adr_img[4] = "./images/E-nor.gif";type[4]="nor";
adr_img[5] = "./images/E-xor.gif";type[5]="xor";
adr_img[6] = "./images/E-xnor.gif";type[6]="xnor";
}
//outils = new Tools(adr_img,type);
setBorder(BorderFactory.createEtchedBorder());
for(int i=0;i<adr_img.length;i++){
add(new TLabel(adr_img[i],type[i]));
add(new TLabel(" "," "));
}
}
public Tools getTools(){
return outils;
}
}
class Tcircuit extends JPanel implements MouseListener,MouseMotionListener{
/**Description de la classe Tcircuit
*elle encapsule le circuit
*/
Tconnect connecteur[];//le circuit est un ensemble de connecteurs
MouseEvent E;
Tcircuit(){
super();
setBorder(BorderFactory.createEtchedBorder());
}
public void mouseClicked(MouseEvent e){
if(SwingUtilities.isLeftMouseButton(e)){
selConnect = -1;selObj = -1;//déselection des objets posés sur le circuit
if(etat == 1){//l'utilisateur dépose une porte logique, il fautla mettre dans le circuit à la position spécifiée dans e
/*instancier un Tobjet avec pour paramètres l'image et le type pris dans le Timage*/
//obj = new Tobjet(img.getImg(),img.getType(),nbObj);
tobj[nbObj] = new Tobjet(img.getImg(),img.getType(),nbObj);
/*l'insérer à la position spécifiée dans e*/
add(tobj[nbObj],e.getPoint());
nbObj++;
/*libérer l'espace alloué au Timage*/
img = null;
etat = 0;//l'application n'attend plus rien
}
}
}
public void mousePressed(MouseEvent e){
}
public void mouseReleased(MouseEvent e){
}
public void mouseEntered(MouseEvent e){
}
public void mouseExited(MouseEvent e){
}
public void mouseDragged(MouseEvent e) {
}
public void mouseMoved(MouseEvent e) {
if(etat == 5){//dessiner le trait
E = e;
repaint();
}
}
public void paint(Graphics g) {
super.paint(g);
if(etat == 5){//dessin du trait entre src et la souris
Color clr=Color.black;//couleur du trait
g.setColor(clr);
g.drawLine(src.getX(),src.getY(),E.getX(),E.getY());
}
}
}
/*=========================================================================================================================================*/
Editeur(){
super("BoolEditor");
WindowListener l = new WindowAdapter() {
public void windowClosing(WindowEvent e){
if(modified){
//demander si on effectue la sauvegarde( en XML)
}
System.exit(0);
}
};
addWindowListener(l);
// création de la barre de menus
JMenuBar menuBar = new JMenuBar();
// création d'un menu
JMenu menu = new JMenu("Fichier");
menuBar.add(menu);
// création des éléments du menu
menu.add(new JMenuItem("Nouveau"));
menu.add(new JMenuItem("Ouvrir"));
// un séparateur
menu.add(new JSeparator(JSeparator.HORIZONTAL));
menu.add(new JMenuItem("ZIP"));
menu.add(new JMenuItem("Jar"));
menu.add(new JMenuItem("FTP"));
// un séparateur
menu.add(new JSeparator(JSeparator.HORIZONTAL));
menu.add(new JMenuItem("Quitter"));
menuBar.add(menu = new JMenu("Edition"));
menu.add(new JMenuItem("Copier"));
menu.add(new JMenuItem("Couper"));
menu.add(new JMenuItem("Coller"));
menu.add(new JSeparator(JSeparator.HORIZONTAL));
menu.add(new JMenuItem("Sélectionner Ligne"));
menu.add(new JMenuItem("Sélectionner Mot"));
menu.add(new JMenuItem("Sélectionner Tout"));
this.setJMenuBar(menuBar);
setLayout(new BorderLayout());
Door = new Portes(true);
add("West",Door);
circus = new Tcircuit();
add("Center",circus);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
setVisible(true);
}
public static void main(String args[]){
try{
Editeur edit = new Editeur();
}catch(Exception E){
System.out.println("Q'est ce qui cloche?");
E.printStackTrace(System.out);
}
}
} |
Partager