| 	
	
	
		
		|||||||
  | 
		
| 
 | 
![]()  | 
	
	
| 
		 | 
	Strumenti | 
| 		
			
			 | 
		#1 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Jul 2007 
				Città: Cassano M.go (Va) 
				
				
					Messaggi: 631
				 
				
				
				
				 | 
	
	
	
	
		
			
			 
				
				[Java] Aiuto su modifica codice
			 
			
		Ho la seguente classe in java: 
		
	
		
		
		
		
			Codice: 
	import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;
import core.Input;
public class InputComponent extends AbstractComponent implements CircuitComponent{
    private static final long serialVersionUID = 1L;
    private LinkComponent link;
    private boolean isLinked;
    
    public InputComponent(String n, CircuitComponent c,CircuitPanel p){
        initPortComponent(n,c,p);
        int w,h;
        w=20;
        h=20;
        getBounds().setSize(w, h);
        setPreferredSize(new Dimension(w,h));
        port=new Input(name);
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                if(isLinked==true){
                    JOptionPane.showMessageDialog(null, "Non e' possibile un altro link", "Link Error", JOptionPane.ERROR_MESSAGE);
                }
                else {
                    if(panel.getFunction()==CircuitPanel.PAINT_LINK_FROM){
                        panel.setLink(new LinkComponent(panel));
                        panel.getLink().setDest(getMe());
                        link=panel.getLink();
                        isLinked=true;
                        panel.getLink().setCornerInput(new Point(getBounds().x,getBounds().y+10),true);
                        panel.doOperations(new PaintLinkOperations(panel,panel.getFacade().getColor()));
                        panel.setFunction(CircuitPanel.PAINT_LINE);
                    }
                    else if(panel.getFunction()==CircuitPanel.PAINT_LINE){
                        panel.getLink().setDest(getMe());
                        link=panel.getLink();
                        isLinked=true;
                        panel.getLink().setCornerInput(new Point(getBounds().x,getBounds().y+10),false);
                        panel.getLink().updateSize();
                        CircuitComponent source = panel.getLink().getSource();
                        CircuitComponent dest = panel.getLink().getDest();
                        panel.repaint();
                        panel.setFunction(CircuitPanel.SELECTION);
                    }
                    else{}
                }
            }
        });
    }
    
    public LinkComponent getLink(){
        return link;
    }
    
    public void setLink(LinkComponent l){
        isLinked=true;
        link=l;
    }
    
    public void unsetLink(){
        isLinked=false;
    }
    
    public boolean isLinked(){
        return isLinked;
    }
    
    public void paintComponent(Graphics g){
    	if(name.startsWith("."));
    	else{
          g.setColor(color);
          if(name.contains("=0*")||name.contains("=1*")){
        	  g.drawLine(0,10,10,10);
        	  
          }
          else{
          if(name.endsWith(".")){
        	g.drawLine(0,10,10,10);
       	   g.drawString(name.substring(0, name.length()-2), 1, 9);
        	g.drawString("n", 1, 20);
      	 }
          else{
          	 g.drawLine(0,10,10,10);
             g.drawString(name, 1, 9);
             }
          }
          if(selected){
             g.setColor(Color.blue);
             g.drawRect(0, 0, getBounds().width-1, getBounds().height-1);
        }
     }
    }
    
    public CircuitComponent copyComponent(){
        copy= new InputComponent(name,component.getCopy(),panel);
        return copy;
    }
    
    public void createComponent(){
        port=new Input(name);
    }
    
    public void beforeRemove() {
        if(isLinked){
            ((OutputComponent)link.getSource()).unsetLink();
            panel.remove(link);
        }
    }
    
    public void moveLink(){
        (newXinput,newYinput,getSize().width , getSize().height);
        Insets insets = panel.getInsets();
        int newX=getBounds().x + insets.left;
        int newY=getBounds().y + insets.top + 10;
        if(getLink().getCornerInput() == 1)
            getLink().setCorner1(new Point(newX,newY));
        else
            getLink().setCorner2(new Point(newX,newY));
        getLink().updateSize();
    }
    
}
Il problema si verifica quando cerco di fare il collegamento tra 2 porte, e questo collegamento lo annullo, poi non posso + ripetere il collegamento (cosa ke voglio evitare), in quanto mi restituisce l'errore: "Non e' possibile un altro link". X correggere il problema credo che dovrei resettare la variabile di errore in modo che si possa poi disegnare ancora un link con la grafica e andare avanti con il circuito. Qualcuno sa aiutarmi nel correggere il problema? In quanto non riesco 
				__________________ 
		
		
		
		
		
			PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale Ultima modifica di Fabietto206 : 01-11-2010 alle 15:36.  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#2 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Jul 2007 
				Città: Cassano M.go (Va) 
				
				
					Messaggi: 631
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Forse basta eliminare le seguenti righe di codice? 
		
	
		
		
		
		
			Codice: 
	if(isLinked==true){
            JOptionPane.showMessageDialog(null, "Non e' possibile un altro link", "Link Error", JOptionPane.ERROR_MESSAGE);
          }
				__________________ 
		
		
		
		
	
	PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#3 | |
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Oct 2007 
				Città: Padova 
				
				
					Messaggi: 4131
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Ho letto rapidamente il codice. 
		
	
		
		
		
		
			Quote: 
	
 Dal codice postato io deduco che: 1) InputComponent può avere al più un LinkComponent. 2) InputComponent viene collegato a un LinkComponent la prima volta che l'utente ci clicca sopra (con qualsiasi tasto del mouse). 3) Una volta collegato a un LinkComponent, un InputComponent non può più essere collegato a un LinkComponent finchè non viene "scollegato". 4) Per "scollegare" un InputComponent dal suo LinkComponent attuale bisogna invocare su InputComponent il metodo 'unsetLink'. Forse il punto 4) è quello che stavi cercando? 
				__________________ 
		
		
		
		
	
	As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford)  | 
|
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#4 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Jul 2007 
				Città: Cassano M.go (Va) 
				
				
					Messaggi: 631
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Allora con la parte in grassetto intendo dire che ho 2 porte e provo a fare il collegamento tra le 2, xò prima di farlo (click tasto sx mouse) lo annullo (click tasto dx mouse). 
		
	
		
		
		
		
			Ho provato a fare così: Codice: 
	if(isLinked==true && isJunctioned==false){
                    JOptionPane.showMessageDialog(null, "Non puoi creare un altro link", "Link Error", JOptionPane.ERROR_MESSAGE);
                    unsetLink();
                }
Se vuoi via pm ti mando il programmino così vedi cosa intendo di preciso cn annullare il collegamento 
				__________________ 
		
		
		
		
	
	PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#5 | |
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Oct 2007 
				Città: Padova 
				
				
					Messaggi: 4131
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 Quote: 
	
 Il tuo componente è la classe InputComponent (che estende AbstractComponent la quale, suppongo, può vantare la classe java.awt.Component da qualche parte nella sua catena di eredità: questo lo si intuisce dalla presenza di una chiamata al metodo 'addMouseListener' che InputComponent invoca su se stesso nel costruttore). Il mouse listener associato a InputComponet è una classe anonima istanziata nel costruttore di InputComponent, e sembra gestire solo l'evento "mouseClicked" senza, attualmente, fare distinzione tra i tasti del mouse (cioè uno può produrre un 'click' valido con un qualsiasi pulsante del mouse, indifferentemente). Un evento di "mouseClick" per un dato componente, se non ricordo male, viene prodotto ogni volta che il mouse viene premuto E rilasciato sull'area di clipping del componente. Non ricordo cosa accada (e ora non ho il tempo di buttare giù del codice di prova) se premi un pulsante (il sinistro) e invece di rilasciarlo premi e rilasci un'altro pulsante: così, a naso, direi che vengono prodotti due eventi distinti di click, uno per ogni pulsante premuto+rilasciato (il che spiegherebbe perchè non ti "annulla" l'azione come ti aspettavi, ma ti crea due eventi: se il link non c'è già, il primo crea il link e il secondo cade nel flusso di esecuzione che visualizza il tuo JOptionPane poichè il link esiste già). Se la mia ipotesi è corretta te la cavi prevedendo e gestendo esplicitamente la "gesture" di annullamento (devi realizzare un mouse listener più raffinato, consiglio lettura del tutorial se non sei pratico). 
				__________________ 
		
		
		
		
		
			As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 02-11-2010 alle 16:30.  | 
|
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#6 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Jul 2007 
				Città: Cassano M.go (Va) 
				
				
					Messaggi: 631
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Cavoli ne sai parecchio di java, complimenti. 
		
	
		
		
		
		
			Ecco la classe che potrebbe eseguire quello che dici tu Codice: 
	public class Istant extends JComponent {
	private static final long serialVersionUID = 1L;
	private static final int H=36;
	private static final int W=18;
	private int row;
	private int col;
	private boolean value;
	private boolean selected;
	private boolean clickable;
	private boolean delayed;
	private ChartPanel panel;
	private IstantHandler handler;
	private Port port;
	private int d1;
	private int d2;
	private int delay;
	
	public Istant(int r,int c,ChartPanel p,IstantHandler h,Port po,boolean cl){
		port = po;
		row = r;
	    col = c;
		value=false;
		selected=false;
		delayed=false;
		clickable=cl;
		panel=p;
		delay=0;
		d1=0;
		d2=0;
		handler=h;
		getBounds().setSize(W, H);
        setPreferredSize(new Dimension(W,H));
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseEntered(MouseEvent evt) {
            	if(clickable){
            		selected=true;
            		repaint();
            	}
            }
            public void mouseExited(MouseEvent evt) {
            	if(clickable){
            		selected=false;
            		repaint();
            	}
            }
            public void mouseClicked(MouseEvent evt) {
            	if(clickable){
            		if(evt.getButton() == MouseEvent.BUTTON1){
            			switchMe(true);
            			handler.switchOther(getMe());
            		}
            		if(evt.getButton() == MouseEvent.BUTTON3){
            			switchMe(false);
            			handler.switchOther(getMe());
            		}
            	}
            }
        });
	}
		
/*Ho eliminato alcuni metodi della classe ke nn mi sembravano utili al contesto*/
}
				__________________ 
		
		
		
		
	
	PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#7 | ||
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Oct 2007 
				Città: Padova 
				
				
					Messaggi: 4131
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 Quote: 
	
 Se questa classe Istant è in qualche modo collegata alla classe al tuo primo post (InputComponent) non è dato saperlo, e mi chiedo perchè l'hai postata, cioè a quale scopo: volevi farmi/farci capire qualcosa in particolare? Tornando al mio precedente messaggio, non so se hai compreso cosa ti suggerivo: io ti suggerivo di prendere la tua classe InputComponent e implementare un mouse listener che gestisca la funzionalità di "annullamento link" che hai descritto. Onestamente non ho capito cosa ti proponevi di realizzare, al tuo primo post, quando scrivesti: Quote: 
	
 1) vuoi permettere ad un utente che sta creando un link su un oggetto InputComponent tramite click del mouse con un bottone, di cancellare questa operazione di creazione del link mediante click con un altro bottone prima che il primo click sia completato? Es.: - A preme pulsante snx su un InputComponet IC - mentre tiene premuto il pulsante snx su IC, A cambia idea e vuole annullare l'azione - quindi mentre continua a tenere premuto il pulsante snx su IC, A fa click (preme e rilascia) il pulsante dx su IC - l'azione di creazione del link per IC viene annullata. 2) vuoi permettere ad un utente che ha già creato un link su un oggetto InputComponent di rimuovere il vecchio link (lo stato di InputComponent torna allo stato che ha quando è senza link)? 3) vuoi permettere ad un utente che ha già creato un link su un oggetto InputComponent di rimuovere il vecchio link e sostituirlo con uno nuovo (lo stato di InputComponent resta allo stato che ha quando è con un link, solo che il link è diverso)? 
				__________________ 
		
		
		
		
	
	As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford)  | 
||
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#8 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Jul 2007 
				Città: Cassano M.go (Va) 
				
				
					Messaggi: 631
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Quello che voglio fare è il punto 1, solo che il tasto sx del mouse non bisogna continuare a premerlo, ma lo premo su IC, lo lascio finché mi trovo sul componente OC (Output component) e quindi lo ripremo. 
		
	
		
		
		
		
			Io vorrei che prima di fare il click sx su OC, premendo il dx si annulli l'operazione: questa funzione è già implementata; xò il problema è che se annullo ciò, poi da IC non posso più creare link perchè mi da errore. Inoltre mi piacerebbe anke implementare quello che hai scritto al punto 2, in quanto non mi permette di fare ciò nel codice come è scritto. 
				__________________ 
		
		
		
		
	
	PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#9 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Jul 2007 
				Città: Cassano M.go (Va) 
				
				
					Messaggi: 631
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Dici che devo modificare questo metodo presente sia in InputComponent che in OutputComponent. 
		
	
		
		
		
		
			Codice: 
	public void unsetLink(){
        isLinked=false;
    }
				__________________ 
		
		
		
		
	
	PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#10 | |
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Oct 2007 
				Città: Padova 
				
				
					Messaggi: 4131
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 Quote: 
	
 Ah, forse è quel ChartPanel che vedo entrare in gioco nel mouse listener anonimo collegato a InputComponent? Se sì, per chiarezza potresti postare anche il codice di OutputComponent? Immagino basti il costruttore, o comunque la porzione che include la creazione e collegamento del suo mouse listener e le dichiarazioni/istanziazioni/implementazioni di tutte le variabili e di tutti i metodi nominati dal codice di detto mouse listener. @EDIT: Ah già, posta pure ChartPanel, sennò non ne veniamo fuori. Credo di cominciare a capire: l'azione del collegare un InputC. con un OutputC. coinvolge anche un ChartPanel comune ad entrambi a cui viene demandata la gestione dello stato relativo all'azione stessa (e non so che altro); mentre i due componenti memorizzano solo il fatto di essere linkati o meno. 
				__________________ 
		
		
		
		
		
			As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 03-11-2010 alle 18:09.  | 
|
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
| 		
			
			 | 
		#11 | 
| 
			
			
			
			 Senior Member 
			
		
			
				
			
			
			Iscritto dal: Jul 2007 
				Città: Cassano M.go (Va) 
				
				
					Messaggi: 631
				 
				
				
				
				 | 
	
	
	
	
		
		
		
		 
		Ti posto tutte e 3 le classi, così ci sono tutte in un unico post 
		
	
		
		
		
		
			Codice: 
	import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.event.MouseEvent;
import javax.swing.JOptionPane;
import core.Input;
public class InputComponent extends AbstractComponent implements CircuitComponent{
    private static final long serialVersionUID = 1L;
    private LinkComponent link;
    private boolean isLinked;
    
    public InputComponent(String n, CircuitComponent c,CircuitPanel p){
        initPortComponent(n,c,p);
        int w,h;
        w=20;
        h=20;
        getBounds().setSize(w, h);
        setPreferredSize(new Dimension(w,h));
        port=new Input(name);
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                if(isLinked==true){
                    JOptionPane.showMessageDialog(null, "Non e' possibile un altro link", "Link Error", JOptionPane.ERROR_MESSAGE);
                }
                else {
                    if(panel.getFunction()==CircuitPanel.PAINT_LINK_FROM){
                        panel.setLink(new LinkComponent(panel));
                        panel.getLink().setDest(getMe());
                        link=panel.getLink();
                        isLinked=true;
                        panel.getLink().setCornerInput(new Point(getBounds().x,getBounds().y+10),true);
                        panel.doOperations(new PaintLinkOperations(panel,panel.getFacade().getColor()));
                        panel.setFunction(CircuitPanel.PAINT_LINE);
                    }
                    else if(panel.getFunction()==CircuitPanel.PAINT_LINE){
                        panel.getLink().setDest(getMe());
                        link=panel.getLink();
                        isLinked=true;
                        panel.getLink().setCornerInput(new Point(getBounds().x,getBounds().y+10),false);
                        panel.getLink().updateSize();
                        CircuitComponent source = panel.getLink().getSource();
                        CircuitComponent dest = panel.getLink().getDest();
                        panel.repaint();
                        panel.setFunction(CircuitPanel.SELECTION);
                    }
                    else{}
                }
            }
        });
    }
    
    public LinkComponent getLink(){
        return link;
    }
    
    public void setLink(LinkComponent l){
        isLinked=true;
        link=l;
    }
    
    public void unsetLink(){
        isLinked=false;
    }
    
    public boolean isLinked(){
        return isLinked;
    }
    
    public void paintComponent(Graphics g){
    	if(name.startsWith("."));
    	else{
          g.setColor(color);
          if(name.contains("=0*")||name.contains("=1*")){
        	  g.drawLine(0,10,10,10);
        	  
          }
          else{
          if(name.endsWith(".")){
        	g.drawLine(0,10,10,10);
       	   g.drawString(name.substring(0, name.length()-2), 1, 9);
        	g.drawString("n", 1, 20);
      	 }
          else{
          	 g.drawLine(0,10,10,10);
             g.drawString(name, 1, 9);
             }
          }
          if(selected){
             g.setColor(Color.blue);
             g.drawRect(0, 0, getBounds().width-1, getBounds().height-1);
        }
     }
    }
    
    public CircuitComponent copyComponent(){
        copy= new InputComponent(name,component.getCopy(),panel);
        return copy;
    }
    
    public void createComponent(){
        port=new Input(name);
    }
    
    public void beforeRemove() {
        if(isLinked){
            ((OutputComponent)link.getSource()).unsetLink();
            panel.remove(link);
        }
    }
    
    public void moveLink(){
        Insets insets = panel.getInsets();
        int newX=getBounds().x + insets.left;
        int newY=getBounds().y + insets.top + 10;
        if(getLink().getCornerInput() == 1)
            getLink().setCorner1(new Point(newX,newY));
        else
            getLink().setCorner2(new Point(newX,newY));
        getLink().updateSize();
    }
    
}
Codice: 
	import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JOptionPane;
import core.Output;
public class OutputComponent extends AbstractComponent implements CircuitComponent {
    
    private static final long serialVersionUID = 1L;
    protected List<LinkComponent> links;
    private boolean isLinked;
    private boolean isJunctioned;
    
    public OutputComponent(String n, CircuitComponent c, CircuitPanel p){
        initPortComponent(n,c,p);
        isJunctioned=false;
        int w,h;
        w=20;
        h=20;
        getBounds().setSize(w, h);
        setPreferredSize(new Dimension(w,h));
        isLinked=false;
        port=new Output(name);
        links=new LinkedList<LinkComponent>();
        addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                if(panel.getFunction()==CircuitPanel.JUN){
                    isJunctioned=true;
                    panel.repaint();
                    panel.setFunction(CircuitPanel.SELECTION);
                }
                else {
                if(isLinked==true && isJunctioned==false){
                    JOptionPane.showMessageDialog(null, "Non puoi creare un altro link", "Link Error", JOptionPane.ERROR_MESSAGE);
                }
                else {
                    if(panel.getFunction()==CircuitPanel.PAINT_LINK_FROM){
                        panel.setLink(new LinkComponent(panel));
                        panel.getLink().setSource(getMe());
                        links.add(panel.getLink());
                        if(!isJunctioned)
                            isLinked=true;
                        panel.getLink().setCornerOutput(new Point(getBounds().x+15,getBounds().y+10),true);
                        panel.doOperations(new PaintLinkOperations(panel,panel.getFacade().getColor()));
                        panel.setFunction(CircuitPanel.PAINT_LINE);
                    }
                    else if(panel.getFunction()==CircuitPanel.PAINT_LINE){
                        panel.getLink().setSource(getMe());
                        links.add(panel.getLink());
                        if(!isJunctioned)
                            isLinked=true;
                        panel.getLink().setCornerOutput(new Point(getBounds().x+15,getBounds().y+10),false);
                        panel.getLink().updateSize();
                        CircuitComponent source = panel.getLink().getSource();
                        CircuitComponent dest = panel.getLink().getDest();
                        panel.repaint();
                        panel.setFunction(CircuitPanel.SELECTION);
                    }
                    else{}
                }
            }
            }
        });
    }
    
    public void init(CircuitComponent c, CircuitPanel p){
        
    }
   
    public List<LinkComponent> getLinks(){
        return links;
    }
    
    public void setLink(LinkComponent l){
        isLinked=true;
        links.add(l);
    }
    
    public void unsetLink(){
        isLinked=false;
    }
    
    public boolean isLinked(){
        return isLinked;
    }
    
    public boolean isJunctioned(){
        return isJunctioned;
    }
    
    public void setJunctioned(boolean t){
    	isJunctioned=t;
    }
    
    public void paintComponent(Graphics g){
    	g.setColor(color);
    	if(name.startsWith("."));
    	else{
    	if(name.endsWith(".")){
    		if(name.contains("=0")||(name.contains("=1"))){
    			g.drawString(name.substring(0,1), 1, 20);
    			g.drawLine(0,10,10,10);
    		}
    		else{
           	g.drawLine(0,10,10,10);
            g.drawString(name.substring(0, name.length()-2), 1, 9);
           	g.drawString("n", 1, 20);
    		}
          	 }
    	else{
        g.drawLine(0,10,10,10);
        if(name.contains("=0"))
        	g.drawString("0", 1, 9);
        else if(name.contains("=1"))
        	g.drawString("1", 1, 9);
        else  {g.drawString(name, 1, 9);
               
               }
    	}       
        if(selected){
            g.setColor(Color.blue);
            g.drawRect(0, 0, getBounds().width-1, getBounds().height-1);
        }
    	}
    }
    
    public CircuitComponent copyComponent(){
        copy = new OutputComponent(name,component.getCopy(),panel);
        return copy;
    }
    
    public void createComponent(){
        port=new Output(name);
    }
    
    public void beforeRemove() {
        if(isLinked || isJunctioned){
            for(int i=0;i<links.size();i++){
                ((InputComponent)links.get(i).getDest()).unsetLink();
                panel.remove(links.get(i));
            }
        }
    }
    public void moveLink(){
        Insets insets = panel.getInsets();
        int newX=getBounds().x + insets.left+15;
        int newY=getBounds().y + insets.top+10;
        for(int i=0;i<links.size();i++){
            if(links.get(i).getCornerOutput() == 1)
                links.get(i).setCorner1(new Point(newX,newY));
            else
                links.get(i).setCorner2(new Point(newX,newY));
            links.get(i).updateSize();
        }
    }
    
}
Codice: 
	import gui.FrameMain;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.event.MouseEvent;
import java.util.LinkedList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class ChartPanel extends JPanel{
	
	private static final long serialVersionUID = 1L;
	protected List <String> names;
	private IstantHandler handler;  //  @jve:decl-index=0:
	private JButton jButton1;  //  @jve:decl-index=0:visual-constraint="273,240"
	private int origX;
	private int origY;
	private JLabel jLabel1;
	private String expression;
	private FrameMain frame;
	
	public ChartPanel(FrameMain fm){
		setLayout(null);
		frame=fm;
		expression="";
		names = new LinkedList<String>();
		jButton1 = new JButton("Refresh Chart");
		jLabel1 = new JLabel("Espressione:  " + expression);
		Insets insets = getInsets();
        Dimension size = jButton1.getPreferredSize();
        jButton1.setBounds(0 + insets.left, 0 + insets.top+100,size.width, size.height);
        size = jLabel1.getPreferredSize();
        jLabel1.setBounds(0 + insets.left, 0 + insets.top,size.width, size.height);
		add(jButton1);
		add(jLabel1);
		jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(MouseEvent evt) {
                handler.generateOutputsIstants();
               }
        });
	}
	public int numNames()
	{
	return names.size();	
	}
	public void setHandler(IstantHandler h){
		handler=h;
	}
	
	public IstantHandler getHandler(){
		return handler;
	}
	
	public void addName(String n){
		if(n.equals("") || n == null)
			return;
		names.add(n);
		origX=30;
		origY=names.size()*20 + 200;
		Insets insets = getInsets();
        Dimension size = jButton1.getPreferredSize();
        jButton1.setBounds(origX + 220 + insets.left, origY + 340 + insets.top,size.width, size.height);
        size=jLabel1.getPreferredSize();
        jLabel1.setBounds(origX + insets.left+20, origY + 370 + insets.top,size.width, size.height);
	}
	
	public int getOrigX(){
		return origX;
	}
	
	public void setExpression(String e){
    	expression=e;
    }
	
	public int getOrigY(){
		return origY;
	}
	
	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		origX=70;
		origY=names.size()*20 + 300;
		int x=70;
		int y=names.size()*20 + 300;
		int height=20;
		int width=610;
		
        g.setColor(Color.BLACK);
        g.drawLine(x, y+200, x, (height+400)-names.size()*20);
        g.drawLine(x, y+200, width+40,y+200);
        for(int i=1;i<=32;i++)
        	g.drawLine(x + (i*18), y+200, x + (i*18),y+205 );
        for(int i=1;i<=32;i++)
        	g.drawString(Integer.toString(i),x + (i*18)-5, y+220 );
        
        int len = names.size()*2;
        for(int i=0;i<len;i++)
        	g.drawLine(x-5, y-((i+1)*18)+198, x+5 ,y-((i+1)*18)+198);
        for(int i=0;i<len;i++)
        	if(i%2==0){
        		g.drawString("0",x-15, y - ((i+1)*18)+5+220);
        		g.drawString(names.get(i/2),x-50, y - ((i+1)*18 + 10-225));
        	}
        	else
        		g.drawString("1",x-15, y - ((i+1)*18)+225);
         	
	public void clearNames(){
		names.clear();
		removeAll();
	    jButton1 = new JButton("Refresh Chart");
		jLabel1 = new JLabel("Espressione:  " + expression);
		add(jButton1);
		add(jLabel1);
		jButton1.addMouseListener(new java.awt.event.MouseAdapter() {
          public void mouseClicked(MouseEvent evt) {
            handler.generateOutputsIstants();
              }
        });
	}
	
}
Non è che ti serve la classe CircuitPanel?? 
				__________________ 
		
		
		
		
	
	PC: Intel Core i5 4690K @ 3,5 Ghz | VGA Gigabyte GTX 970 G1 Gaming | RAM G Skill Ares 1866 Mhz (2x4GB) | HDD WD Caviar Blue 1TB | SSD Samsung 840 Evo 250GB | MoBo AsRock Z97 Extreme 4 Router: Netgear dg834g v5 Notebook: Asus x53sv: Intel i7 2630qm | Geforce gt630 | RAM 4GB | SSD 250GB Cell: Iphone 8 64GB Black Tablet: Ipad Air 16GB + 4G Grigio siderale  | 
| 
		
 | 
	
	
	
		
		
		
		
		
		
			 
		
		
		
		
		
		
			
			
		
	 | 
		
		  
	   | 
| Strumenti | |
		
  | 
	
		
  | 
Tutti gli orari sono GMT +1. Ora sono le: 04:03.









		
		
		


 
 







