Torna indietro   Hardware Upgrade Forum > Software > Programmazione

L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026
La parola d'ordine al Nextcloud Summit 2026, che si è tenuto a Monaco, è stata "sovranità". Non come è spesso usato questo termine in politica ma, al contrario, come capacità positiva di decidere il proprio destino tecnologico, con modalità collaborative e aperte. L'Europa dice già molto nel mondo open source, che viene visto come mezzo per ottenere la tanto agognata autonomia digitale
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più
Dreame X60 Pro Ultra Complete implementa due bracci estensibili, per spazzola e moccio, che si spingono ben oltre quanto visto sino ad oggi permettendo una pulizia di casa ancor più capillare e precisa
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati
La tecnologia SQD-Mini LED di TCL arriva sul taglio da 65 pollici con la serie C8L: 2040 zone, pannello WHVA 2.0 e un picco che alle rilevazioni delle sonde tocca i 4400 nit nel profilo Filmmaker e un HDR quasi perfetto
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 01-11-2010, 13:27   #1
Fabietto206
Senior Member
 
L'Avatar di Fabietto206
 
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();
    }
    
}
La classe fa parte di un progetto in cui c'è la gestione dei circuiti logici.
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 14:36.
Fabietto206 è offline   Rispondi citando il messaggio o parte di esso
Old 01-11-2010, 14:26   #2
Fabietto206
Senior Member
 
L'Avatar di Fabietto206
 
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
Fabietto206 è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 07:39   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ho letto rapidamente il codice.

Quote:
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".
Puoi specificare meglio cosa intendi di preciso con le parole evidenziate in grasseto?
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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 14:53   #4
Fabietto206
Senior Member
 
L'Avatar di Fabietto206
 
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();
                }
Ma nn va, cioè ottengo lo stesso risultato di prima....

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
Fabietto206 è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 15:28   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Fabietto206 Guarda i messaggi
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).
[...]
Da quel che ho capito io, mi pare sia più una questione di gestione corretta dei mouse event per il mouse listener associato al tuo componente.

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 15:30.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 02-11-2010, 17:26   #6
Fabietto206
Senior Member
 
L'Avatar di Fabietto206
 
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
Fabietto206 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2010, 13:22   #7
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Fabietto206 Guarda i messaggi
Ecco la classe che potrebbe eseguire quello che dici tu
[cut]
La classe che hia postat, Istant, è una classe che estende JComponent (dunque rappresenta un componente grafico) e risponde a degli eventi generati dal mouse tramite un mouse listener anonimo istanziato nel costruttore.

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:
...
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".
...
Ho in mente un tot di possibilità, te ne scrivo un paio:

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)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2010, 15:10   #8
Fabietto206
Senior Member
 
L'Avatar di Fabietto206
 
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
Fabietto206 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2010, 15:14   #9
Fabietto206
Senior Member
 
L'Avatar di Fabietto206
 
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
Fabietto206 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2010, 17:03   #10
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Fabietto206 Guarda i messaggi
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.
Fammi capire: quindi l'azione ha due componenti come "attori" ed è "mediata" da una terza entità?
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 17:09.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 03-11-2010, 19:29   #11
Fabietto206
Senior Member
 
L'Avatar di Fabietto206
 
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();
              }
        });
	}
	

}
La classe ChartPanel fa parte di un altro package rispetto a IC e OC, essa si occupa di rappresentare il piano su cui verrà disegnato il circuito.
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
Fabietto206 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


L'Europa conta nella tecnologia e può essere autonoma. Cosa si è detto al Nextcloud Summit 2026 L'Europa conta nella tecnologia e può ess...
Dreame X60 Pro Ultra Complete: i bracci si estendono sempre di più Dreame X60 Pro Ultra Complete: i bracci si esten...
TCL 65C8L, la recensione del SQD-Mini LED da 4400 nit misurati TCL 65C8L, la recensione del SQD-Mini LED da 440...
MSI Maestro 500 Wireless: ANC e 90 ore di autonomia a 70 euro MSI Maestro 500 Wireless: ANC e 90 ore di autono...
NL-LC1 è il primo dissipatore a liquido AIO di Noctua: silenzio è la parola d'ordine NL-LC1 è il primo dissipatore a liquido A...
Il Galaxy S26 FE sta arrivando ma non av...
Lenovo Idea Tab Plus in offerta al Prime...
Hisense: il Prime Day sorprende con un T...
Reolink apre il Prime Day 2026 con scont...
Android 17 sui Pixel con qualche intoppo...
Prime Day, le offerte per i giocatori: M...
Una Tesla Model 3 sfonda una casa e ucci...
La cometa 3I/Atlas è una finestra sul "m...
NVIDIA punta sui data center AI raffredd...
Galaxy Watch Ultra 2 protagonista dei nu...
Valve svela i prezzi ufficiali di Steam ...
CORSAIR accelera per il Prime Day: scont...
Un commento di YouTube alimenta le specu...
GM lascia a casa 1300 operai della Facto...
Microsoft Kilby: il datacenter AI che di...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 14:40.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v