Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Java - Salvare Valore ComboBox Java in un array
Forum - Java - Salvare Valore ComboBox Java in un array

Avatar
rosario.damore (Normal User)
Newbie


Messaggi: 6
Iscritto: 03/10/2010

Segnala al moderatore
Postato alle 8:12
Giovedì, 07/10/2010
Buongiorno,

ho bisogno di un aiuto per implementare il codice: "Using a Combo Box as an Editor" della pagina http://download.oracle.com/javase/tutorial/uiswing/compone ...

In particolare, dopo aver implementato il pulsante OK (già fatto) vorrei salvare i valori selezionati nelle comboBox delle righe in un array. Mi date una mano?


Grazie mille.

PM
Avatar
rosario.damore (Normal User)
Newbie


Messaggi: 6
Iscritto: 03/10/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 9:44
Giovedì, 07/10/2010
La Classe che ho modificato è questa:

Codice sorgente - presumibilmente Java

  1. import java.awt.Component;
  2. import java.awt.Dimension;
  3. import java.awt.Toolkit;
  4.  
  5. import javax.swing.DefaultCellEditor;
  6. import javax.swing.JComboBox;
  7. import javax.swing.JTable;
  8. import javax.swing.table.DefaultTableCellRenderer;
  9. import javax.swing.table.DefaultTableModel;
  10. import javax.swing.table.TableCellRenderer;
  11. import javax.swing.table.TableColumn;
  12.  
  13.  
  14. public class MatriceJTable extends javax.swing.JFrame {
  15.        
  16.         String[] prova;
  17.  
  18.        
  19.         private boolean done = false;
  20.  
  21.     /** Creates new form JTable */
  22.     public MatriceJTable() {
  23.         initComponents();
  24.     }
  25.  
  26.     @SuppressWarnings("unchecked")
  27.  
  28.     private void initComponents() {
  29.        
  30.         prova = new String[5];
  31.         prova[0] = "Valuta l'attributo X con l'attributo Y";
  32.         prova[1] = "Valuta l'attributo X con l'attributo Z";
  33.         prova[2] = "Valuta l'attributo X con l'attributo W";
  34.         prova[3] = "Valuta l'attributo X con l'attributo K";
  35.         prova[4] = "Valuta l'attributo X con l'attributo J";
  36.        
  37.         output = new String[prova.length];
  38.         output_valori = new int[prova.length];
  39.        
  40.         TableColumn column = null;
  41.         Component comp = null;
  42.         int headerWidth = 0;
  43.         int cellWidth = 600;
  44.  
  45.        
  46.  
  47.  
  48.         dm = new DefaultTableModel();
  49.         mioOggetto = new Object[prova.length][2];
  50.                 for (int i = 0; i < prova.length; i++) {
  51.                         mioOggetto[i][0] = prova[i];
  52.                         mioOggetto[i][1] = new String();
  53.                 }
  54.         dm.setDataVector(mioOggetto,
  55.                                 new Object[] { "Valutazione Attributo X", "Valore" });
  56.        
  57.  
  58.                
  59.        
  60.         jScrollPane1 = new javax.swing.JScrollPane();
  61.         jTable1 = new javax.swing.JTable(dm);
  62.         jButton1 = new javax.swing.JButton();
  63.        
  64.  
  65.        
  66.                 // Prendo le dimensioni del desktop
  67.                 Dimension dim_schermo = Toolkit.getDefaultToolkit().getScreenSize();
  68.  
  69.                 // Calcolo la posizione orizzontale della finestra
  70.                 int posX = (int) (dim_schermo.width - getWidth())/4;
  71.  
  72.                 // Calcolo la posizione verticale della finestra
  73.                 int posY = (int) (dim_schermo.height - getHeight())/4;
  74.  
  75.                 // Posiziono la finestra
  76.                 setLocation(posX, posY);
  77.        
  78.         setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
  79.         setTitle("Valutazione Confronto Attributo X");
  80.        
  81.         jTable1.setFont(new java.awt.Font("Arial", 0, 12));
  82.  
  83.         //Fiddle with the Sport column's cell editors/renderers.
  84.         setUpSportColumn(jTable1, jTable1.getColumnModel().getColumn(1));
  85.        
  86.        
  87.        
  88.        
  89.         renderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
  90.         jTable1.setDefaultRenderer(jTable1.getColumnClass(0), renderer);
  91.         jTable1.updateUI();
  92.        
  93.         jTable1.getTableHeader().setResizingAllowed(false);
  94.         jTable1.getTableHeader().setReorderingAllowed(false);
  95.         jTable1.setAlignmentX(Component.CENTER_ALIGNMENT);
  96.         jTable1.setAlignmentY(Component.CENTER_ALIGNMENT);
  97.         jTable1.setCellSelectionEnabled(true);
  98.         jTable1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
  99.         jTable1.setRowHeight(33);
  100.         jScrollPane1.setViewportView(jTable1);
  101.        
  102.         TableCellRenderer headerRenderer =
  103.                 jTable1.getTableHeader().getDefaultRenderer();
  104.  
  105.         for (int i = 0; i < 1; i++) {
  106.             column = jTable1.getColumnModel().getColumn(i);
  107.  
  108.             comp = headerRenderer.getTableCellRendererComponent(
  109.                                  null, column.getHeaderValue(),
  110.                                  false, false, 0, 0);
  111.             headerWidth = comp.getPreferredSize().width;
  112.  
  113.             column.setPreferredWidth(Math.max(headerWidth, cellWidth));
  114.         }
  115.    
  116.        
  117.        
  118.        
  119.         jButton1.setFont(new java.awt.Font("Arial", 0, 18));
  120.         jButton1.setText("OK");
  121.         jButton1.addActionListener(new java.awt.event.ActionListener() {
  122.             public void actionPerformed(java.awt.event.ActionEvent evt) {
  123.                 jButton1ActionPerformed(evt);
  124.             }
  125.         });
  126.  
  127.         javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
  128.         getContentPane().setLayout(layout);
  129.         layout.setHorizontalGroup(
  130.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  131.             .addGroup(layout.createSequentialGroup()
  132.                 .addGap(166, 166, 166)
  133.                 .addComponent(jButton1)
  134.                 .addContainerGap(175, Short.MAX_VALUE))
  135.             .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
  136.         );
  137.         layout.setVerticalGroup(
  138.             layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
  139.             .addGroup(layout.createSequentialGroup()
  140.                 .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 293, javax.swing.GroupLayout.PREFERRED_SIZE)
  141.                 .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
  142.                 .addComponent(jButton1)
  143.                 .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
  144.         );
  145.  
  146.         pack();
  147.     }// </editor-fold>
  148.    
  149.     public void setUpSportColumn(JTable table,
  150.             TableColumn sportColumn) {
  151.                                 //Set up the editor for the sport cells.
  152.                                 comboBox = new JComboBox();
  153.                                 comboBox.addItem("1");
  154.                                 comboBox.addItem("2");
  155.                                 comboBox.addItem("3");
  156.                                 comboBox.addItem("4");
  157.                                 comboBox.addItem("5");
  158.                                 comboBox.setFont(new java.awt.Font("Arial", 0, 18));
  159.                                 comboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "4", "5" }));
  160.                                 comboBox.setAlignmentX(Component.CENTER_ALIGNMENT);
  161.                                 comboBox.setAlignmentY(Component.CENTER_ALIGNMENT);
  162.                                 comboBox.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
  163.                                 comboBox.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
  164.                                 sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
  165.                                
  166.                                 //Set up tool tips for the sport cells.
  167.                                 DefaultTableCellRenderer renderer =
  168.                                 new DefaultTableCellRenderer();
  169.                                 renderer.setToolTipText("Clicca per Selezionare il Valore");
  170.                                 sportColumn.setCellRenderer(renderer);
  171.         }
  172.    
  173.    
  174.  
  175.     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
  176.         // TODO add your handling code here:
  177.                 for (int i=0; i<prova.length; i++){
  178.                         output[i] = (String) comboBox.getSelectedItem();
  179.                         output_valori[i] = Integer.parseInt(output[i]);
  180.                         System.out.println(output_valori);
  181.                         }
  182.        
  183.        
  184.         setDone(true);
  185.     }
  186.  
  187.     public static void main(String args[]) {
  188.         java.awt.EventQueue.invokeLater(new Runnable() {
  189.             public void run() {
  190.                 new MatriceJTable().setVisible(true);
  191.             }
  192.         });
  193.        
  194.     }
  195.  
  196.     // Variables declaration - do not modify
  197.     private String[] output;
  198.     private int[] output_valori;
  199.     public      JComboBox comboBox;
  200.     private javax.swing.JButton jButton1;
  201.     private javax.swing.JScrollPane jScrollPane1;
  202.     private javax.swing.JTable jTable1;
  203.     Object mioOggetto[][];
  204.     // End of variables declaration
  205.    
  206.     /* public double visualizza() {
  207.         int rating;
  208.         this.setVisible(true);
  209.         while (!isDone()){}
  210.         rating = jSlider1.getValue();
  211.         this.dispose();
  212.         return rating;
  213.     }*/
  214.    
  215.         public boolean isDone() {
  216.                 return done;
  217.         }
  218.  
  219.         public void setDone(boolean done) {
  220.                 this.done = done;
  221.         }
  222. }



Ho provato a salvare i valori nell'array output_valori ma mi stampa in console questo:

[I@15601ea
[I@15601ea
[I@15601ea
[I@15601ea
[I@15601ea

Mi date una mano? Grazie

PM
Avatar
rosario.damore (Normal User)
Newbie


Messaggi: 6
Iscritto: 03/10/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 9:48
Giovedì, 07/10/2010
se vi può aiutare, potete incollare il codice in eclipse e vedere che il programma parte e compila.

PM
Avatar
paoloricciuti (Ex-Member)
Pro


Messaggi: 137
Iscritto: 27/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 16:26
Giovedì, 07/10/2010
Innazi tutto avrai bisogno di un'array di combobox e non di un singolo combobox perchè altrimenti il valore selezionato sarà sempre e solo l'ultimo che selezionerai. Riguardo agli strani valori che ti stampa la soluzione è molto semplice:
Codice sorgente - presumibilmente Java

  1. for (int i=0; i<prova.length; i++){
  2.                         output[i] = (String) comboBox.getSelectedItem();
  3.                         output_valori[i] = Integer.parseInt(output[i]);
  4.                         System.out.println(output_valori);
  5.                 }



Come potrai osservare in questa parte di codice tu stampi output_valori che è l'array. Dunque quello che vedi stampato è esattamente la locazione di memoria dell'array. Andando a modificare come segue

Codice sorgente - presumibilmente Java

  1. for (int i=0; i<prova.length; i++){
  2.                         output[i] = (String) comboBox.getSelectedItem();
  3.                         output_valori[i] = Integer.parseInt(output[i]);
  4.                         System.out.println(output_valori[i]);
  5.                 }



Otterrai stampati 5 volte l'ultimo valore. Per evitare questo come ti dicevo, dovrai inserire un array di combobox e modificare ancora di conseguenza il codice in questo modo

Codice sorgente - presumibilmente Java

  1. for (int i=0; i<prova.length; i++){
  2.                         output[i] = (String) comboBox[i].getSelectedItem();
  3.                         output_valori[i] = Integer.parseInt(output[i]);
  4.                         System.out.println(output_valori[i]);
  5.                 }



PM