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);
}
}
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
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
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
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
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);
}
}
Así es, funciona bastante bien. Una buena solución hacerlo con MouseEvents, más simple.
Saludos
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;
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
}
}
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
si no precionas enter no funciona :xD :xD :xD
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
Cita de: Leyer en 24 Noviembre 2011, 18:30 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
Cita de: RyogiShiki en 24 Noviembre 2011, 18:46 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