Ciao a tutti !
è la prima volta che scrivo su questo forum ed è da poco sto "lottando" con Java ..

Il mio progetto è quello di fare un'applicazione capace di gestire il mio archivio di fotografie. Sono già riuscito a fare tutto in HTML ma volevo passare a JAVA per non avere limitazioni nell'accesso a file locali (su un disco esterno).

Tutti i dati vengono presi da un Database in Ms Access, dove c'è una Tabella "Base" con campi tipo ("Album","Anno","Mese","Luogo" e un campo "Link" dove c'è il link alla directory locale dove stanno fisicamente i files).

Il mio programma Java dovrebbe collegarsi al database, estrarre i dati (in base a una query) e "costruire" una finestra con una serie di anteprime. Per ogni album vine costruito uno spazio quadrato (su JPanel) contente il titolo, un'immagine copertina, l'anno e il mese.
Cliccando sul titolo di ogni album vorrei riuscire ad aprire la directory locale dove stanno i files con le foto.

Io ho usato un FlowLayout e ho creato un array di Jpanel (ogni Jpanel ha un box-layout verticale contenente una JLabel per il titolo, una JLabel con l'immagine copertina e una terza JLabel con la data e il luogo).
In pratica riesco a collegarmi al database, riesco a filtrare gli album in base a una query (per ora è fissa .. poi dovrò svilupparla), scorro tutto il RecordSet e per ogni record costruisco il suo JPanel e le sottostanti JLabel. Fin qui tutto bene ... (ed è già un miracolo).

Quello che non riesco a fare è fare in modo che cliccando su una JLabel contenente il titolo o la copertina di un album mi si apra la finestra di windows con la directory dove sono i file.
Utilizzando il metodo mousePressed(MouseEvent e) riesco al massimo a ricavare il testo della JLabel su cui ho cliccato ((JLabel)(e.getSource())).getText() ma non riesco a ricavare la stringa "link" che mi serve per aprire la directory (questo perchè il ResulSet è ormai chiuso). Non voglio creare una JLabel con il link per ovvi motivi estetici !

Come potrei fare ???

inoltre .. sono molto graditi consigli sulla filosofia di programmazione di questa applicazione: non ho mai usato linguaggi di programmazione ad oggetti .. infatti c'è solo una classe con tutto il codice in un solo metodo ..
Grazie a tutti in anticipo !
Vi posto il codice.
Matteo

codice:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.sql.*;


import javax.swing.border.*;


public class ArchivioFoto {
    private JFrame window;
    private JLabel  titolo;
    private JLabel  sottotitolo;
    
    //-------------costruttore --------------------------------
    public ArchivioFoto()    {
    	window = new JFrame("Java");
    	titolo = new JLabel("ARCHIVIO FOTO");
    	sottotitolo = new JLabel("sottotitolo");
    }

    //-------------setup---------------------------------------
    public void setup() {
    	window.setSize(640, 480);
        window.setLocationRelativeTo(null); //mette la finestra al centro
    	window.setExtendedState(JFrame.MAXIMIZED_BOTH);
    	window.setVisible(true);
        
        window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        //------------------------------------ NORD---------------------------------  
        JPanel contenitoreAlto = new JPanel(new FlowLayout(FlowLayout.CENTER));
        contenitoreAlto.setBackground(Color.yellow);
        contenitoreAlto.setPreferredSize(new Dimension(0,80));
        Border blackline = BorderFactory.createLineBorder(Color.black);
        contenitoreAlto.setBorder(blackline);
        contenitoreAlto.add(titolo);
        contenitoreAlto.add(sottotitolo);
        window.add(contenitoreAlto, BorderLayout.NORTH);
        //-------------------------------- WEST------------------------------------
        JPanel contenitoreSn = new JPanel(new FlowLayout(FlowLayout.LEFT));
        contenitoreSn.setBackground(Color.red);
        contenitoreSn.setBorder(blackline);
        window.add(contenitoreSn, BorderLayout.WEST);
        
        //------------------------ CENTER------------------------------------------
        JPanel contenitoreCentro = new JPanel(new FlowLayout(FlowLayout.LEFT));
        contenitoreCentro.setBorder(blackline);    
        Border redline = BorderFactory.createLineBorder(Color.red);
        
          final String Driver = "sun.jdbc.odbc.JdbcOdbcDriver";
          final String Percorso = "C:\\";
          final String MyDataBase = "Foto.mdb";
          final String Url = "jdbc:odbc:driver={Microsoft Access Driver (*.mdb)};DBQ=" + Percorso + MyDataBase;
          Connection con;
        
          try{

             Class.forName(Driver);
             con = DriverManager.getConnection(Url);
             Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);  
             ResultSet rs;

             
             rs = stmt.executeQuery("SELECT * FROM Base WHERE Dove like'%Germania%' ORDER BY Data"); //query di prova
     			rs.last();
     			int totAlbum = rs.getRow(); //calcola il totale di album filtrati
     			sottotitolo.setText("  Album filtrati: " + totAlbum + ".");
     			rs.beforeFirst();
     			
     	     JPanel[] panels = new JPanel[totAlbum];
             JLabel[] titoli = new JLabel[totAlbum];
     	     JLabel[] copertine = new JLabel[totAlbum];
             Icon[] icone = new ImageIcon[totAlbum];
     	     JLabel[] date = new JLabel[totAlbum];
     			
     	     rs.beforeFirst();
             int counter = 0;

     		   while ( rs.next() ) {
     			String album = rs.getString("Album");
     			String tipo = rs.getString("Tipo");
     			String anno = rs.getString("Anno");
     			String mese = rs.getString("Mese");
     			String link = rs.getString("Link");
     			String geoloc = rs.getString("GeoLoc");
     				
     			panels[counter] = new JPanel();
     			panels[counter].setPreferredSize(new Dimension(170,150));
     			BoxLayout layout = new BoxLayout(panels[counter], BoxLayout.Y_AXIS);
     			panels[counter].setLayout(layout);
     				
     			titoli[counter] = new JLabel();
         		titoli[counter].setText(album);
         			
         		icone[counter] = new ImageIcon("E://"+anno+"/"+link+"/data/copertina.jpg");
         		copertine[counter] = new JLabel(icone[counter]);
         			
         		date[counter] = new JLabel();
         		date[counter].setText(mese + " " + anno + "  Tipo: " + tipo + "  GL: "+geoloc);
         			
         		//---------------------- qui iniziano i problemi .............	
         		   titoli[counter].addMouseListener(new MouseAdapter()  {
         	          	 
         	          	 public void mousePressed(MouseEvent e) {
         	          	   sottotitolo.setText("mouse pressssed by " + ((JLabel)(e.getSource())).getText());
         	          	 }
         	           } );
         	        //---------------------- Layout

         		titoli[counter].setAlignmentX(Component.CENTER_ALIGNMENT);
         		copertine[counter].setAlignmentX(Component.CENTER_ALIGNMENT);
         		date[counter].setAlignmentX(Component.CENTER_ALIGNMENT);
         		panels[counter].add(titoli[counter]);
         		panels[counter].add(copertine[counter]);
         		panels[counter].add(date[counter]);
         		panels[counter].setBorder(redline);
         		contenitoreCentro.add(panels[counter]);
     			counter++;
     		   }// end while
     			
     			
           con.close();
           }//end try
           catch(ClassNotFoundException e){
           System.out.println(e.toString());
           }
           catch(SQLException e){
           System.out.println(e.toString());
           }
              
       window.add(contenitoreCentro, BorderLayout.CENTER);
    }//end setup
        
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
           public void run() {
           ArchivioFoto myApp = new ArchivioFoto();
           myApp.setup();
           }
        });
    }
}