Consenso all'uso dei cookies

SITO1 -- SITO2 -- Forum1 -- CercaGlobale -- Informativa su Cookie e Privacy


Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[JAVA]index del pulsante premuto in una serie di pulsanti
#1
Il mio programma legge un file di testo con separatori, crea una serie di pulsanti a cui assegna una label e un testo da visualizzare in un textfield. Funziona tutto bene però io vorrei aggiungere la possibilità di modificare il contenuto del textfield ed aggiornare il file di testo originale, per far questo ho bisogno di conoscere l'indice del pulsante premuto in modo da modificare la lista di stringhe letta dal file. Però io non ho creato un array di pulsanti ma tanti pulsanti singoli e quindi non so come risolvere.
Questo il codice.
Codice:
private static int righe = 4;
   private static int colonne = 6;
   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(",");
               // this adds the currently parsed line to the 2-dimensional string array
               lines.add(Arrays.asList(values));
           }

           inputStream.close();
       }catch (FileNotFoundException e) {
           e.printStackTrace();
       }
       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(List<String> line: lines) {
           JButton button = new JButton(line.get(0)); // label del pulsante
           String comando = line.get(1); // stringa associata al pulsante
           button.setActionCommand(comando);
           button.addActionListener(new ActionListener()
               {
                   public void actionPerformed(ActionEvent ae)
                   {
                       JButton but = (JButton) ae.getSource();
                       jTextField2.setText(but.getActionCommand());  
// ------- inserimento nella clipboard -------------
                       StringSelection stringSelection = new StringSelection (but.getActionCommand());
                       Clipboard clpbrd = Toolkit.getDefaultToolkit ().getSystemClipboard ();
                       clpbrd.setContents (stringSelection, null);
                   }
               });
               buttonPanel.add(button);
       }
      jPanel1.add(buttonPanel);
   }
Cita messaggio
Grazie da:
#2
il pulsante premuto è quello che ricavi dall'istruzione
JButton but = (JButton) ae.getSource();
per tenere traccia dell'ultimo pulsante premuto puoi definire come attributo di classe un JButton ultimoPremuto ed aggiungere alla actionPerformed l'istruzione JButton ultimoPremuto = but; // punta but

[EDIT]
nel precedente topic ti avevo suggerito di non usare una grglia di pulsanti ma una JList, in pratica una lista di elementi selezionabili con un click del mouse; le JList sono indicizzate, se ti servono delgi indici te li ritrovi gratis!
Il mio blog: ZEROZEROCENT.BLOGSPOT.COM
LEGGE DI MURPHY: SE QUALCOSA PUO' ANDAR MALE, LO FARA'
VERSIONE QUANTISTICA DELLA LEGGE DI MURPHY: TUTTO VA MALE CONTEMPORANEAMENTE
Cita messaggio
Grazie da:
#3
Avevo preso in considerazione la Jlist, ma io non desidero un menù a tendina ma una griglia di pulsanti con una certa struttura, vorrei soltanto creare un array di pulsanti in modo da gestirli con un indice.
Ci sono riuscito a creare l'array di pulsanti ma non so come ottenere l'index del pulsante premuto
Codice:
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(",");
                // this adds the currently parsed line to the 2-dimensional string array
                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)); // righe 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].addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent ae)
                    {
                        JButton but = (JButton) ae.getSource();
//                       int indice = ????????????????????????????????????????
                        jLabel1.setText(Integer.toString(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);
    }
Cita messaggio
Grazie da:
#4
Cortesemente allegami il file appunti2.txt (modificando i dati privati, a me non interessa se scrivi "pippo" o "paperino" mi basta la struttura esatta del file;

per quanto riguarda l'indice l'unico modo (inefficiente) che mi viene in mente è:
usi un indice i per scandire buttons[i], ti basta verificare quale buttons[i]==sorgenteEvento e hai trovato l'indice
Il mio blog: ZEROZEROCENT.BLOGSPOT.COM
LEGGE DI MURPHY: SE QUALCOSA PUO' ANDAR MALE, LO FARA'
VERSIONE QUANTISTICA DELLA LEGGE DI MURPHY: TUTTO VA MALE CONTEMPORANEAMENTE
Cita messaggio
Grazie da:
#5
questa soluzione l'avevo pensata anche io e sarei capace di attuarla, ma come hai detto tu è inefficiente, non mi piace, ci deve essere un modo per carpire l'indice del pulsante cliccato, allego il file.

edit: ho letto della possibilità di usare putClientProperty, ho provato così:
Codice:
buttons[i].putClientProperty("indice", i);
            buttons[i].addActionListener(new ActionListener()
                {
                    public void actionPerformed(ActionEvent ae)
                    {
                        JButton but = (JButton) ae.getSource();
                        String indice = (String) but.getClientProperty("indice");
                        jLabel1.setText(indice);
ma mi dà errore in compilazione


Allegati
.txt   appunti2.txt (Dimensione: 442 byte / Download: 2)
Cita messaggio
Grazie da:
#6
ho risolto con
Codice:
           buttons[i].putClientProperty("indice", i);
           buttons[i].addActionListener(new ActionListener()
               {
                   public void actionPerformed(ActionEvent ae)
                   {
                       JButton but = (JButton) ae.getSource();
                       int indice = (Integer) but.getClientProperty("indice");
                       jLabel1.setText(Integer.toString(indice));
Cita messaggio
Grazie da:


Vai al forum:


Utenti che stanno guardando questa discussione: 1 Ospite(i)