Determinare l'indice del pulsante cliccato in un array di pulsanti

di il
1 risposte

Determinare l'indice del pulsante cliccato in un array di pulsanti

Il progetto che sto facendo è una spece di portachiavi, legge un file di testo di nome Appunti.txt e crea dei pulsanti con i nomi delle banche, cliccando sul pulsante deve apparire in una casella di testo la password associata ed inserirla nella Clipboard.
Fin qui funziona, ora vorrei aggiungere la possibilità di modificare una password e salvarla sul file di testo, ma per farlo devo conoscere l'indice del pulsante cliccato, ho tentato con putClientProperty, ma non mi funziona, allego il codice.
Sono un principiante di java quindi vi prego non dare niente per scontato.
public class ProvaFrame extends javax.swing.JFrame {
    private static int righe = 4;
    private static int colonne = 6;
    JButton buttons[];
    public ProvaFrame() {
        String fileName= "appunti2.txt"; // STESSA CARTELLA
        File file= new File(fileName);
        //List<String> lines = new ArrayList<>();
        List<List<String>> lines = new ArrayList<>();
        Scanner inputStream;

        try{
            inputStream = new Scanner(file);

            while(inputStream.hasNext()){
                String line= inputStream.next();
                String[] values = line.split(",");
                lines.add(Arrays.asList(values));
            }
            inputStream.close();
        }catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        buttons = new JButton[lines.size()]; /// array di pulsanti
        initComponents();
        jPanel1.setLayout(new GridLayout( 1, 0)); // RIGHE,COLONNE
        JPanel buttonPanel = new JPanel();
        buttonPanel.setLayout(new GridLayout(righe, colonne, 2, 2)); // rige col gap1 gap2
        
        for(int i = 0; i < lines.size(); i++) {
            buttons[i] = new JButton(lines.get(i).get(0));
            String comando = lines.get(i).get(1);
            buttons[i].setActionCommand(comando);
            buttons[i].putClientProperty("indice", i); // <<<<<<<<<<<< per trovare l'indice
            buttons[i].addActionListener(new ActionListener()
                {
//                    @Override
                    public void actionPerformed(ActionEvent ae)
                    {
                        JButton but = (JButton) ae.getSource();
                        String indice = (String) but.getClientProperty("indice"); //<<<<<<<<  da errore
                        jLabel1.setText(indice);
                        jTextField2.setText(but.getActionCommand());  
                        StringSelection stringSelection = new StringSelection (but.getActionCommand());
                        Clipboard clpbrd = Toolkit.getDefaultToolkit ().getSystemClipboard ();
                        clpbrd.setContents (stringSelection, null);
                    }
                }); 
                buttonPanel.add(buttons[i]);
        }
       jPanel1.add(buttonPanel);
    }

    @SuppressWarnings("unchecked")
  

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {   
// salvataggio ancora da scrivere                                      
    }                                        

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new ProvaFrame().setVisible(true);
            }
        });
    }
           
}

1 Risposte

Devi accedere o registrarti per scrivere nel forum
1 risposte