JTable con barra de desplazamiento horizontal
-
20-09-2019 - |
Pregunta
¿Hay alguna manera de permitir horizontal barra de desplazamiento cuando sea necesario?
La situación era como tal: He un JTable
, una de las células, almacenado una larga longitud de los datos. Por lo tanto, tengo que tener horizontal barra de desplazamiento.
Cualquier persona tiene idea sobre esto?
Solución
En primer lugar, añadir su JTable
dentro de un JScrollPane
y establecer la política para la existencia de las barras de desplazamiento:
new JScrollPane(myTable, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
A continuación, indicar que su JTable no debe auto-cambiar el tamaño de las columnas ajustando el modo AUTO_RESIZE_OFF
:
myJTable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
Otros consejos
Ajuste el AutoResizeMode
a OFF
en las propiedades de la jTable
Para referencia, aquí hay un mínimo ejemplo de la enfoque aceptado . Por otra parte,
-
Se puede ajustar el tamaño de las columnas individuales como se muestra en la Configuración y cambio de ancho de columnas , así como aquí y < a href = "https://stackoverflow.com/q/31977754/230513"> aquí .
-
Se puede ajustar el tamaño total del panel de cerramiento de desplazamiento como se muestra en la la implementación de un cliente de Desplazamiento-comprensión , así como aquí y aquí .
import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.TableModel;
/**
* @see https://stackoverflow.com/a/37318673/230513
*/
public class Test {
private void display() {
JFrame f = new JFrame("Test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TableModel model = new AbstractTableModel() {
private static final int N = 32;
@Override
public int getRowCount() {
return N;
}
@Override
public int getColumnCount() {
return N;
}
@Override
public Object getValueAt(int rowIndex, int colIndex) {
return "R" + rowIndex + ":C" + colIndex;
}
};
JTable table = new JTable(model) {
@Override
public Dimension getPreferredScrollableViewportSize() {
return new Dimension(320, 240);
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
f.add(new JScrollPane(table));
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
public static void main(String[] args) {
EventQueue.invokeLater(new Test()::display);
}
}
Para mí funciona:
table.setAutoscrolls (true);