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?

¿Fue útil?

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,

imagen

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);

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top