Devo creare un JTable all'interno di JScrollPane con colonne ridimensionabili (quando l'utente aumenta la larghezza della colonna - appare la barra di scorrimento orizzontale). Per questo ho usato table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
. Inoltre, quando viewport è sufficientemente ampio da contenere l'intera tabella, le colonne dovrebbero allungarsi per riempire la larghezza della finestra. Per fare questo devo ignorare getScrollableTracksViewportWidth()
metodo della classe JTable come segue:Abilitazione del ridimensionamento automatico di JTable solo se adatto a viewport
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
Questo approccio funziona bene, tranne una cosa: quando ho prima volta tenta di ridimensionare colonna è tornare proprio larghezza alla posizione iniziale. Se riesco a ridimensionare rapidamente la colonna e rilasciare la tabella del mouse, continuare a lavorare bene. Quindi, qual è la ragione di tale comportamento? Perché la tabella tenta di ridimensionare anche se restituisce false? O, forse, puoi proporre una soluzione migliore per l'implementazione di tale modalità di ridimensionamento?
Bellow è un semplice esempio di lavoro di problema di cui sopra:
import javax.swing.*;
public class TestTable {
private static Object[][] data = new Object[][] {
{ "a", "b", "c" },
{ "d", "e", "f" }
};
private static Object[] colNames = new Object[] { "1", "2", "3" };
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
JTable table = new JTable(data, colNames) {
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
};
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}
});
}
}
Eccellente, funziona bene. – user2137020
Vedere anche: http://stackoverflow.com/questions/15499255/jtable-with-autoresize-horizontal-scrolling-and-shrinkable-first-column per un'implementazione diversa. – camickr
Funziona come un fascino! L'unica soluzione che ho trovato per funzionare perfettamente. –