una sirve seleccionar seleccionada que para obtener los getvalueat getselectedrow fila desde datos como codigo java swing jtable jscrollpane

java - sirve - obtener datos de un jtable



Desplazamiento de JTable a un índice de fila especificado (5)

Es muy fácil, JTable también tiene el método scrollRectToVisible. Si lo desea, puede intentar algo como esto para hacer que scrollpane vaya a la parte inferior si se agrega un nuevo registro:

jTable1.getSelectionModel().setSelectionInterval(i, i); jTable1.scrollRectToVisible(new Rectangle(jTable1.getCellRect(i, 0, true)));

Donde fue el último registro agregado.

Tengo una JTable que está dentro de un JScrollPane. Las filas se agregan a la tabla en tiempo de ejecución en función de los eventos que ocurren en mi aplicación. Quiero que el panel de exploración se desplace hasta el final de la tabla cuando se agregue una nueva fila a la tabla.

Para JLists Existe el [ensureIndexIsVisible][1]() que fuerza a un índice particular en la lista a ser visible. Estoy buscando lo mismo pero para JTable. Parece que tendría que mover manualmente la vista de desplazamiento en el panel de desplazamiento, pero pensé que tenía que haber una manera más fácil.


JList usa internamente scrollRectToVisible y especifica las coordenadas para desplazarse. Creo que tendrá que recodificar una funcionalidad similar para JTable.


La primera respuesta funciona bien, pero la fila seleccionada se coloca en la parte inferior de la tabla. Así que creé esta versión modificada:

private void scrollToVisible(int rowIndex, int vColIndex ) { JTable table = getTablePanel().getTable(); if (!(table.getParent() instanceof JViewport)) { return; } if (table.getRowCount()<1){ return; } JViewport viewport = (JViewport)table.getParent(); // view dimension Dimension dim = viewport.getExtentSize(); // cell dimension Dimension dimOne = new Dimension(0,0); // This rectangle is relative to the table where the // northwest corner of cell (0,0) is always (0,0). Rectangle rect = table.getCellRect(rowIndex, vColIndex, true); Rectangle rectOne; if (rowIndex+1<table.getRowCount()) { if (vColIndex+1<table.getColumnCount()) vColIndex++; rectOne = table.getCellRect(rowIndex+1, vColIndex, true); dimOne.width=rectOne.x-rect.x; dimOne.height=rectOne.y-rect.y; } // ''+ veiw dimension - cell dimension'' to set first selected row on the top rect.setLocation(rect.x+dim.width-dimOne.width, rect.y+dim.height-dimOne.height); table.scrollRectToVisible(rect); }

Ahora la fila seleccionada se posiciona en la parte superior de la tabla.


Me parece mucho más fácil establecer la posición de la ventana gráfica en lugar de desplazar la tabla. El siguiente es mi código.

public void scrollCellToView(int rowIndex, int vColIndex) { if (!(this.getParent() instanceof JViewport)) { return; } JViewport viewport = (JViewport) this.getParent(); Rectangle rect = this.getCellRect(rowIndex, vColIndex, true); Rectangle viewRect = viewport.getViewRect(); int x = viewRect.x; int y = viewRect.y; if (rect.x >= viewRect.x && rect.x <= (viewRect.x + viewRect.width - rect.width)){ } else if (rect.x < viewRect.x){ x = rect.x; } else if (rect.x > (viewRect.x + viewRect.width - rect.width)) { x = rect.x - viewRect.width + rect.width; } if (rect.y >= viewRect.y && rect.y <= (viewRect.y + viewRect.height - rect.height)){ } else if (rect.y < viewRect.y){ y = rect.y; } else if (rect.y > (viewRect.y + viewRect.height - rect.height)){ y = rect.y - viewRect.height + rect.height; } viewport.setViewPosition(new Point(x,y)); }


Vea este ejemplo: http://www.exampledepot.com/egs/javax.swing.table/Vis.html

actualización: el enlace ahora está obsoleto, aquí está el código (de http://smi-protege.stanford.edu/repos/protege/protege-core/trunk/src/edu/stanford/smi/protege/util/ComponentUtilities.java )

public static void scrollToVisible(JTable table, int rowIndex, int vColIndex) { if (!(table.getParent() instanceof JViewport)) { return; } JViewport viewport = (JViewport)table.getParent(); // This rectangle is relative to the table where the // northwest corner of cell (0,0) is always (0,0). Rectangle rect = table.getCellRect(rowIndex, vColIndex, true); // The location of the viewport relative to the table Point pt = viewport.getViewPosition(); // Translate the cell location so that it is relative // to the view, assuming the northwest corner of the // view is (0,0) rect.setLocation(rect.x-pt.x, rect.y-pt.y); table.scrollRectToVisible(rect); // Scroll the area into view //viewport.scrollRectToVisible(rect); }