[Software in Java per la ricerca del cammino minimo]

di il
1 risposte

[Software in Java per la ricerca del cammino minimo]

Salve a tutti.

Sono alle prese con la realizzazione in Java di un programma che, data una mappa italiana con circa 70 città, ti restituisce il percorso.
Il programma è stato scritto sfruttando le librerie grafiche Swing e Awt.
In altre parole: ho un'interfaccia grafica divisa in due parti; sulla sinistra c'è la mappa dell'Italia con circa 70 città e a sinistra appare il percorso calcolato.
Nel momento in cui scelgo la città di partenza e quella di arrivo, clicco sul pulsante "Calcola" e in automatico mi viene calcolato il percorso, e in particolare sulla mappa dell'Italia mi viene disegnato il percorso con una linea gialla.
Il problema è questo: quando clicco su reset, si resetta il percorso, ma sulla mappa rimane ancora la linea gialla del percorso precedente!
Come posso fare per risolvere?

Ecco uno screen-shot dell'interfaccia grafica:



Ecco qualche porzione di codice dell'interfaccia, nel caso in cui possa aiutare:


public class Principale extends JFrame
{
    private Cartina cart;
    private HashMap<String,Integer> nodiRete = new HashMap<String, Integer>();
    private Vector<String> path = new Vector<String>();
    private JButton calcola, resetta;
    private JLabel sorgente, destinazione, etic1, etic2, etic3;
    private JRadioButton scelta1, scelta2;
    private JScrollPane scroll;
    private JList pathList;

    
    public Principale()
    {
    	try
    	{
    		UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    	} catch(Exception e)
    		{
    		JOptionPane.showMessageDialog(null, "Opzione UIManager non implementabile.");
    		}
    	
    	setMinimumSize(new Dimension(1000, 600));
    	inizializzaComponenti();
    	BufferedImage background;
    	
        try {
            background = ImageIO.read(new File("images/cartinaItalia.bmp"));
            cart = new Cartina(background,sorgente,destinazione);
            add(cart);
            this.setSize(cart.getSize());
            cart.setOpaque(true);
            cart.setVisible(true);
            
            BufferedReader in = new BufferedReader(new FileReader("images/coordinate.txt"));
            String r = in.readLine();
            int i = 1;
            while(r != null)
            	{
                	String[] l = r.split(" ");
                	nodiRete.put(l[0],i);
                	r = in.readLine();
                	i++;
            	}
        	} catch (IOException eccezione)
        			{
        				Logger.getLogger(Principale.class.getName()).log(Level.SEVERE, null, eccezione);
        				JOptionPane.showMessageDialog(null, "Il file della cartina non e' stato trovato.");
        			}      
    }
    
    private void inizializzaComponenti()
    {    	
    	calcola = new JButton();
    	resetta = new JButton();
    	sorgente = new JLabel();
    	destinazione = new JLabel();
    	etic1 = new JLabel();
    	etic2 = new JLabel();
    	etic3 = new JLabel();
    	scelta1 = new JRadioButton();
    	scelta2 = new JRadioButton();
    	scroll = new JScrollPane();
    	pathList = new JList();
    		
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  setBounds(new java.awt.Rectangle(50, 50, 800, 600));
        setResizable(false);
        getContentPane().setLayout(null);
        
        getContentPane().setBackground(new Color(45, 45, 45));
        
        etic1.setBackground(new Color(153, 204, 255));
        etic1.setText("SORGENTE: ");

            ..............
            ..............
            ..............
            ..............

        
        calcola.setText("CALCOLA");
        calcola.addActionListener(new java.awt.event.ActionListener()
        	{
            	public void actionPerformed(java.awt.event.ActionEvent evt)
            	{
            		calcolaActionPerformed(evt);
            	}
        } );
        getContentPane().add(calcola);
        calcola.setBounds(640, 200, 110, 20);
        
        resetta.setText("RESET");
        resetta.setEnabled(false);
        resetta.addActionListener(new java.awt.event.ActionListener()
        	{
        		public void actionPerformed(java.awt.event.ActionEvent evt)
        		{
        			resettaActionPerformed(evt);
        		}
        } );
        getContentPane().add(resetta);
        resetta.setBounds(640, 230, 110, 20);
        
            ..............
            ..............
            ..............
            ..............

    private void resettaActionPerformed(java.awt.event.ActionEvent evt)
    {
    	sorgente.setText("***partenza***");
        destinazione.setText("***destinazione***");
        DefaultListModel model =  (DefaultListModel) pathList.getModel();
        model.clear();
        if(cart.getComponentCount() == 21)
        	cart.remove(20);
        cart.repaint();
        resetta.setEnabled(false);
    }
    
    private void calcolaActionPerformed(java.awt.event.ActionEvent evt)
    {
             ..............
            ..............
    }
    
                ..............
            ..............
            ..............
            ..............
   
}
Grazie in anticipo.

1 Risposte

  • Re: [Software in Java per la ricerca del cammino minimo]

    Se fai un remove (oppure un removeall)
    devi sempre chiamare anche la validate
    
     model.clear();
            if(cart.getComponentCount() == 21)
               cart.remove(20);
      ==>   cart.validate(); 
            cart.repaint();
            
            resetta.setEnabled(false);
    
    Ciao
Devi accedere o registrarti per scrivere nel forum
1 risposte