tabla sale novedades lanzamiento horizontal fecha descargar cuando con java swing jtable autoresize

sale - scroll en tabla java



¿Cómo hacer JTable tanto AutoResize como horizontall scrollable? (4)

Estoy colocando una JTable en un JScrollPane

Pero cuando establezco JTable Auto Resizeable, entonces no tendrá barra de desplazamiento horizontal.

si configuro AUTO_RESIZE_OFF, entonces el Jtable no llenará el ancho de su contenedor cuando el ancho de la columna no sea lo suficientemente grande.

Entonces, ¿cómo puedo hacer esto?

  1. cuando la mesa no es lo suficientemente ancha, expanda para llenar el ancho de su contenedor
  2. cuando la mesa es lo suficientemente ancha, hazla desplazable.

Gracias


Descubrí que todo lo que se necesita es incluir

table = new JTable(model); // this enables horizontal scroll bar table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF );

y luego cuando se haya calculado el ancho y alto de la ventana gráfica requerida, incluya

frame.getContentPane().add(new JScrollPane(table)) table.setPreferredScrollableViewportSize(new Dimension(width,height));


Necesita personalizar el comportamiento de la interfaz desplazable.

import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.table.*; public class TableHorizontal extends JFrame { public TableHorizontal() { final JTable table = new JTable(10, 5) { public boolean getScrollableTracksViewportWidth() { return getPreferredSize().width < getParent().getWidth(); } }; table.setAutoResizeMode( JTable.AUTO_RESIZE_OFF ); final JScrollPane scrollPane = new JScrollPane( table ); getContentPane().add( scrollPane ); } public static void main(String[] args) { TableHorizontal frame = new TableHorizontal(); frame.setDefaultCloseOperation( EXIT_ON_CLOSE ); frame.pack(); frame.setSize(400, 300); frame.setVisible(true); } }

El código anterior básicamente dimensiona el componente en su tamaño preferido o el tamaño de la ventana gráfica, el que sea mayor.


Si configura el Diseño de su contenedor en BorderLayout con una BorderLayout.CENTER diseño BorderLayout.CENTER , entonces la JTable se redimensionará automáticamente para adaptarse a su contenedor.

Si desea hacer que un componente sea desplazable, puede envolver la JTable con un JScrollPane .

setLayout(new BorderLayout()); add(new JScrollPane(new JTable()), BorderLayout.CENTER);


Si por algún motivo la personalización de JTable no es una opción (por ejemplo, puede crearse en un código de terceros), puede lograr el mismo resultado configurándolo para alternar entre dos modos diferentes de JTable AUTO_RESIZE cada vez que se cambie el tamaño de la ventana gráfica, por ejemplo:

jTable.getParent().addComponentListener(new ComponentAdapter() { @Override public void componentResized(final ComponentEvent e) { if (jTable.getPreferredSize().width < jTable.getParent().getWidth()) { jTable.setAutoResizeMode(JTable.AUTO_RESIZE_ALL_COLUMNS); } else { jTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF); } } });