Oppure

Loading
07/10/10 6:12
rosario.damore
Buongiorno,

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

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.
aaa
07/10/10 7:44
rosario.damore
La Classe che ho modificato è questa:

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Toolkit;

import javax.swing.DefaultCellEditor;
import javax.swing.JComboBox;
import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableCellRenderer;
import javax.swing.table.TableColumn;


public class MatriceJTable extends javax.swing.JFrame {
	
	String[] prova; 

	
	private boolean done = false;

    /** Creates new form JTable */
    public MatriceJTable() {
        initComponents();
    }

    @SuppressWarnings("unchecked")

    private void initComponents() {
    	
    	prova = new String[5];
    	prova[0] = "Valuta l'attributo X con l'attributo Y";
    	prova[1] = "Valuta l'attributo X con l'attributo Z";
    	prova[2] = "Valuta l'attributo X con l'attributo W";
    	prova[3] = "Valuta l'attributo X con l'attributo K";
    	prova[4] = "Valuta l'attributo X con l'attributo J";
    	
    	output = new String[prova.length];
    	output_valori = new int[prova.length];
    	
        TableColumn column = null;
        Component comp = null;
        int headerWidth = 0;
        int cellWidth = 600;

        


        dm = new DefaultTableModel();
        mioOggetto = new Object[prova.length][2];
		for (int i = 0; i < prova.length; i++) {
			mioOggetto[i][0] = prova[i];
			mioOggetto[i][1] = new String();
		}
        dm.setDataVector(mioOggetto,
				new Object[] { "Valutazione Attributo X", "Valore" });
        

		
        
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable(dm);
        jButton1 = new javax.swing.JButton();
        

        
		// Prendo le dimensioni del desktop
		Dimension dim_schermo = Toolkit.getDefaultToolkit().getScreenSize();

		// Calcolo la posizione orizzontale della finestra
		int posX = (int) (dim_schermo.width - getWidth())/4;

		// Calcolo la posizione verticale della finestra
		int posY = (int) (dim_schermo.height - getHeight())/4;

		// Posiziono la finestra
		setLocation(posX, posY);
        
        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Valutazione Confronto Attributo X");
        
        jTable1.setFont(new java.awt.Font("Arial", 0, 12));

        //Fiddle with the Sport column's cell editors/renderers.
        setUpSportColumn(jTable1, jTable1.getColumnModel().getColumn(1));
        
        
        
        
        DefaultTableCellRenderer renderer = new DefaultTableCellRenderer();
        renderer.setHorizontalAlignment(DefaultTableCellRenderer.CENTER);
        jTable1.setDefaultRenderer(jTable1.getColumnClass(0), renderer);
        jTable1.updateUI();
        
        jTable1.getTableHeader().setResizingAllowed(false);
        jTable1.getTableHeader().setReorderingAllowed(false);
        jTable1.setAlignmentX(Component.CENTER_ALIGNMENT);
        jTable1.setAlignmentY(Component.CENTER_ALIGNMENT);
        jTable1.setCellSelectionEnabled(true);
        jTable1.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR));
        jTable1.setRowHeight(33);
        jScrollPane1.setViewportView(jTable1);
        
        TableCellRenderer headerRenderer =
        	jTable1.getTableHeader().getDefaultRenderer();

        for (int i = 0; i < 1; i++) {
            column = jTable1.getColumnModel().getColumn(i);

            comp = headerRenderer.getTableCellRendererComponent(
                                 null, column.getHeaderValue(),
                                 false, false, 0, 0);
            headerWidth = comp.getPreferredSize().width;

            column.setPreferredWidth(Math.max(headerWidth, cellWidth));
        }
    
        
        
        
        jButton1.setFont(new java.awt.Font("Arial", 0, 18));
        jButton1.setText("OK");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(166, 166, 166)
                .addComponent(jButton1)
                .addContainerGap(175, Short.MAX_VALUE))
            .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 293, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jButton1)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>
    
    public void setUpSportColumn(JTable table,
            TableColumn sportColumn) {
				//Set up the editor for the sport cells.
				comboBox = new JComboBox();
				comboBox.addItem("1");
				comboBox.addItem("2");
				comboBox.addItem("3");
				comboBox.addItem("4");
				comboBox.addItem("5");
				comboBox.setFont(new java.awt.Font("Arial", 0, 18));
				comboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "4", "5" }));
				comboBox.setAlignmentX(Component.CENTER_ALIGNMENT);
				comboBox.setAlignmentY(Component.CENTER_ALIGNMENT);
				comboBox.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));
				comboBox.setCursor(new java.awt.Cursor(java.awt.Cursor.WAIT_CURSOR));
				sportColumn.setCellEditor(new DefaultCellEditor(comboBox));
				
				//Set up tool tips for the sport cells.
				DefaultTableCellRenderer renderer =
				new DefaultTableCellRenderer();
				renderer.setToolTipText("Clicca per Selezionare il Valore");
				sportColumn.setCellRenderer(renderer);
	}
    
    

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
		for (int i=0; i<prova.length; i++){
			output[i] = (String) comboBox.getSelectedItem();
			output_valori[i] = Integer.parseInt(output[i]);
			System.out.println(output_valori);
			}
    	
    	
    	setDone(true);
    }

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

    // Variables declaration - do not modify
    private String[] output;
    private int[] output_valori;
    public 	JComboBox comboBox;
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTable jTable1;
    DefaultTableModel dm;
    Object mioOggetto[][];
    // End of variables declaration
    
    /* public double visualizza() {
    	int rating;
    	this.setVisible(true);
    	while (!isDone()){}
    	rating = jSlider1.getValue();
    	this.dispose();
    	return rating;
    }*/
    
	public boolean isDone() {
		return done;
	}

	public void setDone(boolean done) {
		this.done = done;
	}
}


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
aaa
07/10/10 7:48
rosario.damore
se vi può aiutare, potete incollare il codice in eclipse e vedere che il programma parte e compila.
aaa
07/10/10 14:26
paoloricciuti
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:
                for (int i=0; i<prova.length; i++){
                        output[i] = (String) comboBox.getSelectedItem();
                        output_valori[i] = Integer.parseInt(output[i]);
                        System.out.println(output_valori);
                }


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

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


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

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

aaa