Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Xedrox en 6 Marzo 2011, 01:01 am



Título: JTable, leer informacion editada por el usuario
Publicado por: Xedrox en 6 Marzo 2011, 01:01 am
Buenas, estoy haciendo un programa de prueba con Netbean, tengo una tabla con 4 columnas y la idea es que al apretar un boton sume el contenido que inserto el usuario en la fila uno al presionar un boton. Como puedo leer el contenido de la Tabla, NetBeans agrega tanto codigo autogenerado que me pierdo :S.

Muchas Gracias
Saludos


Título: Re: JTable, leer informacion editada por el usuario
Publicado por: visualfree en 6 Marzo 2011, 06:11 am
Aca te hice un codigo de ejemplo:

primero ingresa varios nombres y numeros y luego presiona el boton sumar...
espero te sea de ayuda.

No uso NetBeans.

Código:
import javax.swing.*;
import javax.swing.table.DefaultTableModel;

import java.awt.GridLayout;
import java.awt.event.*;

public class SumaJTable {
public static void main(String[] args) {
NuevaVentana v=new NuevaVentana();
v.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
v.setVisible(true);
}

}
class NuevaVentana extends JFrame{
public NuevaVentana(){
setTitle("Suma JTable");
setSize(ancho,largo);
NuevoPanel p=new NuevoPanel();
add(p);
}
private final int ancho=330;
private final int largo=300;


}
class NuevoPanel extends JPanel{
JLabel lbNombre=new JLabel("Ingresar Nombre:");
JTextField txtNombre=new JTextField();
JLabel lbNumero=new JLabel("Ingresar Numero:");
JTextField txtNumero=new JTextField();
DefaultTableModel modelo=new DefaultTableModel();
{
modelo.addColumn("Nombre");
modelo.addColumn("Numero");
}
JTable tabla=new JTable(modelo);
JScrollPane scroll=new JScrollPane(tabla);
JButton btnSuma=new JButton("Agregar Datos");
JLabel lbSuma=new JLabel("0");
JButton SumarDatos=new JButton("Sumar Datos");
int sumita=0;
public NuevoPanel(){
this.setLayout(null);
lbNombre.setBounds(20,20,120,20);
this.add(lbNombre);
txtNombre.setBounds(20,40,120,20);
this.add(txtNombre);
lbNumero.setBounds(20,60,120,20);
this.add(lbNumero);
txtNumero.setBounds(20,80,120,20);
this.add(txtNumero);
lbSuma.setBounds(20,100,30,30);
this.add(lbSuma);
scroll.setBounds(150,20,140,100);
this.add(scroll);
btnSuma.setBounds(150,120,140,20);
this.add(btnSuma);
SumarDatos.setBounds(150,140,140,20);
this.add(SumarDatos);
OyentebtnSuma oyente=new OyentebtnSuma();
btnSuma.addActionListener(oyente);
OyenteSumarDatos oyente1=new OyenteSumarDatos();
SumarDatos.addActionListener(oyente1);
}
class OyentebtnSuma implements ActionListener{
public void actionPerformed(ActionEvent e){
String nom=txtNombre.getText();
int num=Integer.parseInt(txtNumero.getText());
Object[] fila=new Object[2];
fila[0]=nom;
            fila[1]=num;
            modelo.addRow(fila);
           
}
}
class OyenteSumarDatos implements ActionListener{
public void actionPerformed(ActionEvent e)
{
int aux=0;
for(int i = 0; i < tabla.getRowCount(); i++) 
            {
            sumita = Integer.parseInt(tabla.getValueAt(i, 1).toString());
            aux=sumita+aux;
           
            }
lbSuma.setText(Integer.toString(aux));

       
}
}

}


Título: Re: JTable, leer informacion editada por el usuario
Publicado por: Xedrox en 6 Marzo 2011, 16:15 pm
Gracias por la respuesta, pero antes de complicarme voy a preguntar algo mas simple, supongamos que tengo otra vez un boton, una tabla y un label, yo quiero que al presionar el boton, el label tome texto de lo que hay en la celda 1-1 (primera fila primera columna), pero en vez de eso pone "null". He aqui el codigo:

Código:
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
 {                                        
      label.setText(String.valueOf(Tabla.getValueAt(1,1)));
}

Otra que intente y me tira una Excepcion "nullPointerException"

Código:
 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
 {                                        
      label.setText(Tabla.getValueAt(1,1).toString());
 }

Muchas gracias saludos!

Pego todo el codigo por si ven algo raro:


Código:

package javaapplication6;
import javax.swing.*;
/**
 *
 * @author Nicolas
 */
public class NewJFrame extends javax.swing.JFrame
{

   
    public NewJFrame()
    {
        initComponents();
    }

   
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                         
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        Tabla = new javax.swing.JTable();
        label = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jButton1.setText("Calcular");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        Tabla.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null}
            },
            new String [] {
                "Title 1"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.String.class
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }
        });
        jScrollPane1.setViewportView(Tabla);

        label.setText("Resultado:");

        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(27, 27, 27)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(label)
                    .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 161, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(660, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(20, 20, 20)
                .addComponent(jButton1, javax.swing.GroupLayout.PREFERRED_SIZE, 40, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 57, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(220, 220, 220)
                .addComponent(label)
                .addContainerGap(47, Short.MAX_VALUE))
        );

        pack();
    }// </editor-fold>                       

    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        label.setText(Tabla.getValueAt(0,0).toString());
     
    }                                       


    // Variables declaration - do not modify                     
    private javax.swing.JTable Tabla;
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel label;
    // End of variables declaration                   

}


Título: Re: JTable, leer informacion editada por el usuario
Publicado por: ChavalChavito en 7 Marzo 2011, 22:16 pm
Código:
 private void JTableMousePressed(java.awt.event.MouseEvent evt) 
       {
        int fila= JTable.getSelectedRow();
        label.setText((String) dtm.getValueAt(fila, 0)); 
        // d la fila clickeada la primer columna (x eso el 0)
        // dtm DefaultTableModel
}


Título: Re: JTable, leer informacion editada por el usuario
Publicado por: 1mpuls0 en 7 Marzo 2011, 23:06 pm
Hola qué tal.

El problema radica aquí:

Netbeans

jaja no te creas, es en esta parte de código

Código
  1. Tabla.setModel(new javax.swing.table.DefaultTableModel(
  2.            new Object [][] {
  3.                {null}
  4.            },
  5.  

Ya que el valor es nulo al tratar de obtener su valor.

Podrías cambiar el "null" por """"  :xD

O puedes hacer lo siguiente en el método "jButton1ActionPerformed"

Código
  1. private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                        
  2.     Object objeto = Tabla.getValueAt(0,0);
  3.     if(objeto==null)
  4.     Tabla.setValueAt("",0,0);
  5.  
  6.        label.setText(Tabla.getValueAt(0,0).toString());
  7.    }    
  8.  

Para mi gusto está mejor la primera opción.

Saludos.


Título: Re: JTable, leer informacion editada por el usuario
Publicado por: Xedrox en 8 Marzo 2011, 02:26 am
Muchas Gracias por las respuestas. Saludos!