Título: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: ZedGe en 24 Noviembre 2011, 04:09 am
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); } }
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: RyogiShiki en 24 Noviembre 2011, 04:15 am
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.
(http://k10.kn3.net/E92DD268D.png)
Saludos
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: ZedGe en 24 Noviembre 2011, 04:53 am
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
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: RyogiShiki en 24 Noviembre 2011, 16:03 pm
Eso es algo más o menos complicado de hacer.lo que necesitas es implementar un ListSelectionListener (http://docs.oracle.com/javase/1.4.2/docs/api/javax/swing/event/ListSelectionListener.html) 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
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: ZedGe en 24 Noviembre 2011, 16:21 pm
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
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: ZedGe en 24 Noviembre 2011, 17:42 pm
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); } }
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: RyogiShiki en 24 Noviembre 2011, 17:48 pm
Así es, funciona bastante bien. Una buena solución hacerlo con MouseEvents, más simple.
Saludos
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: Leyer en 24 Noviembre 2011, 18:08 pm
que tal asi? 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; private static final long serialVersionUID = 1L; public pru(){ textField.addKeyListener(this); textField.setText("Dato a buscar"); panel.add(jScrollPane); textArea.setEnabled(false); textArea.setEditable(false); //Llenamos el modelo 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); 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 (){ {"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++){ if (temp.equalsIgnoreCase(data)) { table.changeSelection(row,0,false,true); int[] rows = table.getSelectedRows(); for(row=0;row<rows.length;row++){ for(column=0;column<table.getColumnCount();column++){ val+=table.getValueAt(rows[row], column)+" "; } val+="\n"; } textArea.append(val); break; } } } } //Encabezados de la tabla private String[] getColumnas (){ return columna; } public static void main (String args []) { @Override public void run() { pru obj = new pru(); obj.setVisible(true); } }); } @Override if(arg0. getKeyCode() ==KeyEvent. VK_ENTER)search (textField. getText()); } @Override public void keyReleased (KeyEvent arg0 ) {} @Override public void keyTyped (KeyEvent arg0 ) {} @Override int[] rows = table.getSelectedRows(); 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 // TODO Auto-generated method stub } @Override // TODO Auto-generated method stub } @Override // TODO Auto-generated method stub } @Override // TODO Auto-generated method stub } }
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: ZedGe en 24 Noviembre 2011, 18:21 pm
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
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: Leyer en 24 Noviembre 2011, 18:30 pm
si no precionas enter no funciona :xD :xD :xD
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: ZedGe en 24 Noviembre 2011, 18:36 pm
xD Gracias Amigo De Todas formas el codigo que envie yo tambien funciona al 100% ese de apretar y que salga un popup o algo así (ventana emergente), si a alguien ls sirve aquí el código para deerminar el ancho de una columna tuJTable.getColumnModel().getColumn(0).setResizable(false);//esto para que no se pueda editar el anocho manualmente tuJTable.getColumnModel().getColumn(0).setPreferredWidth(500); // 500 es el tamaño de la columna, aun que pongas 1 el tamaño no sera casi invisible, ya que viene uno predeterminado
xD
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: RyogiShiki en 24 Noviembre 2011, 18:46 pm
si no precionas enter no funciona :xD :xD :xD
Wow no he visto el código bien, pero a penas busco un dato Bum! Loop infinito! XD. Solo aviso. --EDIT-- Solo da problemas al buscar el dato d3. --EDIT 2-- El problema solo se dá cuando recorro la lista varias veces y busco un dato. Es en reaidad un problema algo dificil de reproducir. Saludos
Título: Re: Problema Con Selección De Fila En Jtable Y Evento
Publicado por: Leyer en 24 Noviembre 2011, 18:57 pm
Wow no he visto el código bien, pero a penas busco un dato Bum! Loop infinito! XD. Solo aviso. --EDIT-- Solo da problemas al buscar el dato d3. --EDIT 2-- El problema solo se dá cuando recorro la lista varias veces y busco un dato. Es en reaidad un problema algo dificil de reproducir.
Saludos
cierto, era el ListSelectionListener que le habia colocado
|