Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    jtextfield e jbutton per salvare valori in 2 array

    Salve ragazzi, non sò come fare per salvare due valori letti da due jtextfield in due rispettivi vettori al click su un bottone apposito.
    Ho creato un JFrame in cui ho inserito delle label, due jtextfiel e un bottone..quello che stò provando a fare è:
    dopo aver inserito questi due valori "a" e "b" (che sarebbero ascissa e ordinata di una coordiata)
    vorrei che clikkando sul bottone, mi venissero fatti dei controlli su a e b e se questi controlli sono rispettati a e b vengano inseriti in due vettori rispettivamente ascisseDir[] e ordinateDir[].
    Stò trovando difficoltà anche perchè questi inserimenti di a e b, i relativi controlli e tutto ciò che segue lo avevo fatto nel main che andava a richiamare un'altra classe, ma adesso che la professoressa mi ha detto di inserire tali valori attraverso una finestra, mi sono incasinato un pò.
    Posto il codice:
    codice:
     
    import java.awt.event.*;
    import javax.swing.*;
    import java.io.*;
    import lpsolve.*;  
    public class DirectionFrame extends javax.swing.JFrame {              
    
    // Variables declaration - do not modify     
    private javax.swing.JButton jButton1;     
    private javax.swing.JLabel jLabel1;     
    private javax.swing.JLabel jLabel2;     
    private javax.swing.JLabel jLabel3;     
    private javax.swing.JLabel jLabel4;     
    private javax.swing.JSpinner jSpinner1;     
    private javax.swing.JTextField jTextField1;     
    private javax.swing.JTextField jTextField2;     
    // End of variables declaration      
    
    public void actionPerformed(ActionEvent e) {         
             System.exit(0);     
    }      
    public DirectionFrame() {
             initComponents();
    }      
    private void initComponents() {          
    jLabel1 = new javax.swing.JLabel();         
    jTextField1 = new javax.swing.JTextField();         
    jTextField2 = new javax.swing.JTextField();         
    jLabel2 = new javax.swing.JLabel();         
    jLabel3 = new javax.swing.JLabel();         
    jButton1 = new javax.swing.JButton();         
    jSpinner1 = new javax.swing.JSpinner();         
    jLabel4 = new javax.swing.JLabel();          
    
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);         setTitle("INSERT DIRECTIONS");          
    
    jLabel1.setFont(new java.awt.Font("Times New Roman", 0, 18));          
    jLabel1.setText("Per ogni direzione inserisci le coordinate ");          
    
    jTextField1.setFont(new java.awt.Font("Tahoma", 0, 18));        
    jTextField2.setFont(new java.awt.Font("Tahoma", 0, 18));
    
    jLabel2.setFont(new java.awt.Font("Times New Roman", 0, 18));          jLabel2.setText("X:");          
    
    jLabel3.setFont(new java.awt.Font("Times New Roman", 0, 18));          jLabel3.setText("Y:");          
    
    jButton1.setFont(new java.awt.Font("Times New Roman", 0, 18));          jButton1.setText("AGGIUNGI");          
    
    jSpinner1.setFont(new java.awt.Font("Times New Roman", 0, 14));           
    
    jLabel4.setFont(new java.awt.Font("Times New Roman", 0, 18));          jLabel4.setText("Selezionare il numero di direzioni da inserire...");          
    
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());         getContentPane().setLayout(layout);         layout.setHorizontalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(layout.createSequentialGroup()
    .addContainerGap()
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
    .addComponent(jLabel2,javax.swing.GroupLayout.PREFERRED_SIZE, 24,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
    .addComponent(jTextField1,javax.swing.GroupLayout.PREFERRED_SIZE, 103,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addGap(41, 41, 41)
    .addComponent(jLabel3)
    .addGap(18, 18, 18)
    .addComponent(jTextField2,javax.swing.GroupLayout.PREFERRED_SIZE,103,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addGap(72, 72, 72))
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
    .addComponent(jButton1,javax.swing.GroupLayout.PREFERRED_SIZE, 143,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addGap(151, 151,151))
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()
    .addComponent(jLabel4,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
    .addGap(18, 18, 18)
    .addComponent(jSpinner1, javax.swing.GroupLayout.PREFERRED_SIZE, 51,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addGap(39, 39, 39))))
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()        .addGap(71, 71, 71).addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 333,Short.MAX_VALUE)
    .addGap(47, 47, 47)));
             layout.setVerticalGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING,layout.createSequentialGroup()        .addContainerGap()                 .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)              .addComponent(jSpinner1,javax.swing.GroupLayout.PREFERRED_SIZE,javax.swing.GroupLayout.DEFAULT_SIZE,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 20,javax.swing.GroupLayout.PREFERRED_SIZE))
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)                 
    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 22,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)             .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)              .addComponent(jLabel3)
    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, 36,javax.swing.GroupLayout.PREFERRED_SIZE))
    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 36,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addComponent(jLabel2)))
    .addGap(13, 13, 13)
    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 41,javax.swing.GroupLayout.PREFERRED_SIZE)
    .addContainerGap()));
    pack();
    }
              public void jButton1ActionPerformed(java.awt.event.ActionEvent evt){
              int a = Integer.parseInt(jTextField1.getText());
              int b = Integer.parseInt(jTextField2.getText());
              }      
              public static void main(String[] args){
              ProvaMatrice matrix = new ProvaMatrice(); // Creo l'oggetto matrice
              /* Inserisco da tastiera il numero di righe, il numero di colonne e il numero di direzioni*/
              try {
                  int n = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci il numero di colonne della griglia: "));
                 int m = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci il numero di righe della griglia: "));
                 int k = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci il numero di direzioni: "));
                  /* Vettori che conterranno rispettivamente le ascisse e le ordinate delle direzioni */
                 int[] ascisseDir = new int[k];
                 int[] ordinateDir = new int[k];
                
      /* File in cui vengono salvati i dati e i risultati della chiamata a LpSolve*/             
                 FileOutputStream file = new FileOutputStream("Results " + n + "x" + m + " dimensions.txt");
                 PrintStream scrivi = new PrintStream(file);
                  JFrame f = new DirectionFrame();
                  scrivi.println("Griglia con " + m + " righe e " + n + " colonne.");
    /* Inserisco le k direzioni (a,b) controllando che rispettino determinate proprietà*/ 
                  for (int i = 0; i < k; i++) { // questo i devo farlo essere il valore selezionato del JSpinner1
                      int a, b; // sono gli a e b che inserisco nelle jtextfield X = a e Y = b
                      do {
                         /* Ascissa della direzione */ // questi sono i controlli su a e b
                      if (a < 0 || a >= n) { // controllo che non ecceda num colonne della griglia                           System.err.println("Errore: Inserire un valore intero dell'ascissa 'a' positivo e minore di " + n);
                      }
                  } while (a < 0 || a >= n);
                     do {
                         /* Ordinata della direzione */
                         b = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci l'ordinata della " + (i + 1) + " direzione (può essere anche negativa):"));
                         if (b >= m || b <= -m) { // controllo che non ecceda num righe della griglia                         System.err.println("Errore: Inserire un valore intero per l'ordinata 'b' maggiore di " + (-m) + " e minore " + m);
                         }
                     } while (b >= m || b <= -m); 
          /* Se le coordinate inserite sono coprimi, le salvo nei due rispettivi vettori*/
    if (matrix.coprimi(a, b) == true) {
                         ascisseDir[i] = a;
                         ordinateDir[i] = b;
    } else {
                         System.err.println("Errore: le coordinate inserite non sono coprime, inserire delle coordinate con Massimo Comun Divisore uguale a 1.");
                         System.exit(0);
                     }
                      System.out.println("l'ascissa della " + (i + 1) + " direzione è " + ascisseDir[i] + " l'ordinata " + ordinateDir[i]);
                 }
                  /* genero la Matrice A e con l'istruzione dopo la stampo nel file */
                 int[][] A = matrix.matrice(m, n, k, ascisseDir, ordinateDir, scrivi);             
                 matrix.stampa(n, m, scrivi);
    /**
    * Qui richiamo altri metodi di una classe ProvaMatrice ma non sono utili ai fini di quel che vorrei fare con il JFrame
    */
    
    } catch (Exception e) {
                 System.out.println("Errore. E' stato inserito un valore non valido.");             System.exit(0);
             }
             /* Create and display the form */
             java.awt.EventQueue.invokeLater(new Runnable() {
                  public void run() {
                     new DirectionFrame().setVisible(true);
                 }
             });
          }
      }
    Qualcuno potrebbe gentilmente aiutarmi?
    Grazie a tutti in anticipo.

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    che brutto codice: a che servono tutti gli import se poi usi:

    package.controPackage.classe

    ?
    E' frutto di un qualche IDE (tipo hai disegnato la finestra con qualche tool?)
    Se fosse così: butta l'IDE o quanto meno, usalo per quello che è strettamente necessario (verificare subito che tu stia scrivendo codice senza errori di sintassi)


    Comunque dividi et impera è il comandamento della programmazione (a maggior ragione di quella OO). Se facevi tutto nel main, male.

    Dividi in vari metodi che svolgono compiti specifici, per esempio:

    - un (metodo) boolean che dica se l'inserimento si può fare oppure no (se cambiano le condizioni in futuro, andrai a modificare solo questo metodo)
    - un eventuale metodo che si occupi di gestire le dimensioni degli array ascisse e ordinate (se non puoi/vuoi usare qualche struttura (arraylist, vector, quel che ti pare) che autoincrementi le proprie dimensioni).

    Bene il metodo per inizializzare i componenti, ma perché non farlo nel costruttore (è sempre l'IDE che fa sta cosa, immagino)?

    Chiudi netbeans/eclipse e comincia a programmare davvero e vedrai che questi non saranno più problemi nel giro di qualche ora.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Ciao e grazie per la risposta!!!.. effettivamente stò utilizzando NetBeans IDE
    Ho inserito l'inizializzazione dei componenti nel costruttore, come mi ha consigliato tu e creato un metodo per i controlli..
    adesso il fatto è che, per inserire un numero di coppie (a,b) pari al valore che seleziono in JSpinner1, devo fare un ciclo for oppure devo associare un evento alle JTextField, del tipo quando ho raggiunto quel valore le rendo inutilizzabili?
    Inoltre vorrei che, quando inserisco i valori a e b nelle due jTextField e clikko sul JButton, se (a,b) soddisfano i controlli del metodo controllDirections(int a, int b), i due valori mi venissero inseriti in due ArrayList, rispettivamente ArrayList<Integer> ascisseDir e ArrayList<Integer>OrdinateDir, quale evento dovrei associare a JButton?

    Questo è il metodo del JButton:
    codice:
        
    public void jButton1ActionPerformed(ActionEvent evt) {
             int a = Integer.parseInt(jTextField1.getText());
             int b = Integer.parseInt(jTextField2.getText());
             if(controlDirections(a,b)==true){
                 ascisseDir.add(a);
                 ordinateDir.add(b);
             }
         }
    e questo il metodo per i controlli:
    codice:
    public boolean controlDirections(int a, int b) {
             JFrame f = new JFrame("ERRORE!");
             JButton jButton2 = new JButton("OK");
             do {  /* Ascissa della direzione */
                 if (a < 0 || a >= n) { // controllo che non ecceda le dim delle colonne della griglia
                     f.add(new JLabel("Errore: Inserire un valore intero dell'ascissa 'a' positivo e minore di " + n));
                      setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
                 }
             } while (a < 0 || a >= n);
             do {             /* Ordinata della direzione */
                 if (b >= m || b <= -m) { // controllo che non ecceda le dim delle righe della griglia
                     f.add(new JLabel("Errore: Inserire un valore intero per l'ordinata 'b' maggiore di " + (-m) + " e minore " + m));
                 }
             } while (b >= m || b <= -m);
                      /* Controllo se le coordinate inserite sono coprimi */
             if (coprimi(a, b) == true) {
                 return true;
             } else {
                 System.err.println("Errore: le coordinate inserite non sono coprime, inserire delle coordinate con Massimo Comun Divisore uguale a 1.");
                 return false;
             }
          }

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    ti dico solo la parte del JButton perché sul resto non ho capito che devi fare:
    codice:
    ActionListener
    e l'interfaccia da implementare e contiene solo un metodo:
    codice:
    public void actionPerformed (ActionEvent ae)
    sulla gestione degli eventi hai diverse pagine di tutorial (sia qui, che sul sito java/oracle) che facendo una ricerca online. Attacchi l'ascoltatore al tuo JButton e in actionPerformed fai tutto quello che devi fare.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.