Problema Con Selección De Fila En Jtable Y Evento

Iniciado por ZedGe, 24 Noviembre 2011, 04:09 AM

0 Miembros y 2 Visitantes están viendo este tema.

ZedGe

El problema es que tengo una tabla, de 1 fila y 5 columnas, hice que al apretar 1 elemento se seleccione la fila completa, y ademas que no lo editen.


El "PROBLEMA" es que no logro por ejemplo, que los datos de la fila seleccionada aparezcan no se, en un jlabel o un textfield en la parte de abajo, intente con algunos SYSTEM para ver que variable contenía la selección y nada. Espero me entiendan adjunto mi codigo...


import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

public class pru extends JFrame{
           
       public pru()
    {

        JTable tblEjemplo = new JTable();
        JScrollPane scpEjemplo= new JScrollPane();
         
       
        //Llenamos el modelo
        DefaultTableModel dtmEjemplo = new DefaultTableModel(getFilas(),
                                                             getColumnas());
       

        tblEjemplo=new JTable(dtmEjemplo){
        public boolean isCellEditable(int rowIndex, int vColIndex) {
            return false;
           
        }}; //return false: Desabilitar edición de celdas.
       
        tblEjemplo.setModel(dtmEjemplo);
        scpEjemplo.add(tblEjemplo);
        this.add(scpEjemplo);
        this.setSize(500, 200);
        scpEjemplo.setViewportView(tblEjemplo);
       
    }

    //Datos de las filas
    private Object[][] getFilas()
    {
         Object fila[][]=new Object[][] {
                            {"a1", "b1", "c1", "d1", "a"},
                            {"a2", "b2", "c2", "d2","a"},
                            {"a3", "b3", "c3", "d3","a"}};

         return fila;
               
    }

    //Encabezados de la tabla
    private String[] getColumnas()
    {
          String columna[]=new String[]{"A","B","C", "D", "E"};
          return columna;
    }

   
    public static void main(String args[]) {
        pru obj = new pru();
        obj.setVisible(true);
       
    }
}




RyogiShiki

#1
Pues lo acabo de probar y no he tenido problemas, los datos aparecen normal. Si este no es el problema por favor explícate mejor.



Saludos


ZedGe

El programa lo que ahce es al poner 1 celda se selecciona toda la fila... lo que quiero es que al seleccionarla abajo de la tabla donde no hay nada exista un text field o un jlabel que imprima los datos de la fila seleccionada

RyogiShiki

Eso es algo más o menos complicado de hacer.lo que necesitas es implementar un ListSelectionListener Aquí un ejemplo: http://www.java2s.com/Code/Java/Swing-JFC/ListeningforSelectionEventsinaJTableComponent.htm

No sabría decirte como hacerlo exactamente ya que nunca he tenido la necesidad de usar uno de esos.

Saludos


ZedGe

ok gracias lo vere haber si se puede hacer algo...


Lo que quiero hacer es que ingrese un datos en un jlabel y los busque y lo muestre en un Jtable.

Y en caso de que hallan unos 4 al seleccionar 1 de esos esa misma info salga en un jtextfield abajo. Intente en vez de un Jtable, un jlabel gigante pero me salian descuadradas los datos por que necesitaban un orden como:


Código      Cantidad      Nombre
4454544    21               Producto 1
4545454545 246                  Producto 2

al tener un codigo ams grande o mayor cantidad quedaba todo desconfigurado

ZedGe

testeen este codigo..... creo que aqui esta la solucion tengo que adaptarlo nada mas =D


package puntodeventa;





import java.awt.event.MouseEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
*
* @author beastieux
*/
public class pr extends JFrame {

    private JTable tblEjemplo;
    private JScrollPane scpEjemplo;
    private DefaultTableModel dtmEjemplo;

    public pr()
    {

        tblEjemplo = new JTable();
        scpEjemplo= new JScrollPane();

        //Llenamos el modelo
        dtmEjemplo = new DefaultTableModel(getFilas(),
                                                             getColumnas());

        tblEjemplo.setModel(dtmEjemplo);
        scpEjemplo.add(tblEjemplo);
        this.add(scpEjemplo);
        this.setSize(500, 200);
        scpEjemplo.setViewportView(tblEjemplo);

        setEventoMouseClicked(tblEjemplo);

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
    }

    //Datos de las filas
    private Object[][] getFilas()
    {
         Object fila[][]=new Object[][] {
                            {"a1", "b1", "c1", "d1"},
                            {"a2", "b2", "c2", "d2"},
                            {"a3", "b3", "c3", "d3"}};
         return fila;
    }

    //Encabezados de la tabla
    private String[] getColumnas()
    {
          String columna[]=new String[]{"A","B","C", "D"};
          return columna;
    }

    private void setEventoMouseClicked(JTable tbl)
    {
        tbl.addMouseListener(new java.awt.event.MouseAdapter() {

        @Override
        public void mouseClicked(MouseEvent e) {
        tblEjemploMouseClicked(e);
        }
        });
    }

    private void tblEjemploMouseClicked(java.awt.event.MouseEvent evt) {

       String cadena="";

        int row = tblEjemplo.rowAtPoint(evt.getPoint());
        if (row >= 0 && tblEjemplo.isEnabled())
        {
            for (int i=0; i < tblEjemplo.getColumnCount();i++)
            {
               cadena=cadena + " " +  dtmEjemplo.getValueAt(row,i).toString();
            }
        }

        JOptionPane.showMessageDialog(null, cadena);
    }

    public static void main(String args[]) {
        pr obj = new pr();
        obj.setVisible(true);
    }
}

RyogiShiki

Así es, funciona bastante bien. Una buena solución hacerlo con MouseEvents, más simple.

Saludos


Leyer

#7
que tal asi?
Código (java) [Seleccionar]

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;

public class pru extends JFrame implements KeyListener,MouseListener{
private static final long serialVersionUID = 1L;
private JTable table = new JTable();
    private JTextField textField=new JTextField(10);
    private JTextArea textArea =new JTextArea();

    public pru(){
this.setLayout(new GridLayout(2,0));
textField.addKeyListener(this);
textField.setText("Dato a buscar");
        JScrollPane scpEjemplo= new JScrollPane();
        JPanel panel=new JPanel(new GridLayout());
        JScrollPane jScrollPane=new JScrollPane(textArea);
        panel.add(jScrollPane);
        textArea.setEnabled(false);
        textArea.setEditable(false);
        //Llenamos el modelo
        DefaultTableModel dtmEjemplo = new DefaultTableModel(getFilas(), getColumnas());
     
        table=new JTable(dtmEjemplo){
private static final long serialVersionUID = 1L;
public boolean isCellEditable(int rowIndex, int vColIndex) {
            return false;
           
        }}; //return false: Desabilitar edición de celdas.
        table.setModel(dtmEjemplo);
        table.addMouseListener(this);
       // table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        scpEjemplo.add(table);
        JPanel panel2=new JPanel(new BorderLayout());
        panel2.add(textField,BorderLayout.NORTH);
        panel2.add(scpEjemplo,BorderLayout.CENTER);
        this.add(panel2);
        this.add(panel);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setSize(500, 400);
        scpEjemplo.setViewportView(table);
    }
    //Datos de las filas
    private Object[][] getFilas(){
         Object fila[][]=new Object[][] {
                            {"a1", "b1", "c1", "d1", "a"},
                            {"a2", "b2", "c2", "d2","a"},
                            {"a3", "b3", "c3", "d3","a"},
                            {"a1", "b1", "c1", "d1", "a"},
                            {"a2", "b2", "c2", "d2","a"},
                            {"a3", "b3", "c3", "d3","a"},
          {"a3", "b3", "c3", "d3","b"}};
         return fila;
               
    }
    public void search(String data) {
    textArea.setText("");
int numberOfRows = table.getRowCount();
for (int row = 0; row < numberOfRows; row++) {
for(int column=0;column<table.getColumnCount();column++){
String temp = (String) table.getValueAt(row, column);
if (temp.equalsIgnoreCase(data)) {
table.changeSelection(row,0,false,true);
int[] rows = table.getSelectedRows();
String val="";
for(row=0;row<rows.length;row++){
for(column=0;column<table.getColumnCount();column++){
val+=table.getValueAt(rows[row], column)+"                    ";
}
val+="\n";
}
System.out.println(val);
textArea.append(val);
break;
}
}

}
}
    //Encabezados de la tabla
    private String[] getColumnas(){
          String columna[]=new String[]{"A","B","C", "D", "E"};
          return columna;
    }
    public static void main(String args[]) {
    SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
pru obj = new pru();
        obj.setVisible(true);
}
});
    }
@Override
public void keyPressed(KeyEvent arg0) {
if(arg0.getKeyCode() ==KeyEvent.VK_ENTER)search(textField.getText());
}
@Override public void keyReleased(KeyEvent arg0) {}
@Override public void keyTyped(KeyEvent arg0) {}

@Override
public void mouseClicked(MouseEvent arg0) {
int[] rows = table.getSelectedRows();
String val="";
textArea.setText("");
for(int row=0;row<rows.length;row++){
for(int column=0;column<table.getColumnCount();column++){
val+=table.getValueAt(rows[row], column)+"                    ";
}
val+="\n";
}
//System.out.println(val);
textArea.append(val);

}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub

}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub

}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub

}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub

}
}

ZedGe

No me funciona tu codigo, osea selecciona la fila y todo pero el evento no me funciona..


también estoy intentado lograr que las columnas tengan anchos diferentes y no me sale :S es re dificil trabajar con jtable pero era la unica opcion que tenia

Leyer

#9
si no precionas enter no funciona :xD :xD :xD