Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Aiuto x la modifica di una classe

    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

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    mi dici cosa non riesci a fare?

    Il messaggio lo generi qui, guardando cosa fai hai che controlli una sola variabile (booleana)
    codice:
    if(isLinked==true){
                        JOptionPane.showMessageDialog(null, "Non e' possibile un altro link", "Link Error", JOptionPane.ERROR_MESSAGE);
                    }
    per cui ricorda quando premi annulla di mettere isLinked a false e ti dovrebbe funzionare.
    Non ho guardato tutto il codice, penso sei in grado di trovare l'azione relativa al pulsante annulla e ad inserire un assegnamento a false della variabile booleana

  3. #3
    Il punto della classe in cui era presente il messaggio l'avevo trovato pure io, ma volevo sapere se, per risolvere il problema, basta eliminare le righe di codice ke hai quotato tu, oppure fare:
    codice:
    if(isLinked==true && isJunctioned==false){ 
              JOptionPane.showMessageDialog(null, "Non puoi creare un altro link", "Link Error", JOptionPane.ERROR_MESSAGE); 
              unsetLink(); 
    }
    Nel codice nn c'è nessun pulsante annulla, ma l'annullamento dell'azione viene generato dal click destro del mouse.

    Se vuoi via pm ti mando il programma ke vedi come gira, così capisci l'azione a cui mi riferisco...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    un punto in cui chiedi annulla c'è, una funzione che fa annulla la chiamerai. L'ultima cosa che fai è mettere quel valore a false. Se poi aggiungi un'altra condizione (scelta tua) devi ricordarti di gestirla in modo corretto.
    Non so dirti quale sia la soluzione migliore, dipende da come è fatto il resto del programma

  5. #5
    Una funzione che annulla non c'è.
    In pratica se prima di disegnare il collegamento, decido di annullarlo (click dx mouse), poi in futuro da quella porta non potrò più fare collegamenti; è come se non mi resetta qualcosa....

    Io vorrei che una volta ke ho annullato il collegamento, poi in futuro potrò rifarlo, invece da come è strutturato ora il codice non posso xkè mi dà il messaggio "Non puoi...."

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    si ho capito, ci sono dei flag di attivazione che devi gestire (devi riportare insomma tutto alle condizioni di default).
    In base a quello che vedo ora mi viene da pensare che ti basta mettere a false, dovrei avere tutto il progetto per avere un'idea d'insieme

  7. #7
    Ho provato a chiamare il metodo unsetLink(); xò non funziona.
    Il mio + grosso problema è ke devo modificare codice non scritto da me e senza commenti....

    Se vuoi ti mando il sorgente...

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    quale è l'azione annulla??

  9. #9
    Il click del tasto destro del mouse annulla il disegno del collegamento (xò prima ke il collegamento tra le 2 porte sia stato fatto)

  10. #10
    Da qualche parte nel codice viene implementata la classe MouseListener, dovresti controllare i metodi mousePressed() o mouseClicked() dove probabilmente viene gestita la pressione del tasto destro del mouse. Cerca qualcosa del tipo:

    codice:
    ...
    (mouseEvent.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK
    ...
    probabilmente è lì che devi invocare il metodo unsetLink().
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.