Ich muss eine JTable innerhalb von JScrollPane mit skalierbaren Spalten erstellen (wenn der Benutzer die Spaltenbreite erhöht - die horizontale Bildlaufleiste erscheint). Dazu verwende ich table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
. Wenn das Ansichtsfenster groß genug ist, um die gesamte Tabelle zu enthalten, sollten die Spalten gestreckt werden, um die Breite des Darstellungsbereichs zu füllen. Um dies zu erreichen I getScrollableTracksViewportWidth()
Methode der Klasse JTable wie folgt außer Kraft setzen haben:Aktivieren der automatischen Größenanpassung von JTable nur, wenn es in das Ansichtsfenster passt
@Override
public boolean getScrollableTracksViewportWidth() {
return getPreferredSize().width < getParent().getWidth();
}
Dieser Ansatz funktioniert gut, bis auf eine Sache: wenn ich zum ersten Mal versuchen, Spalte, um die Größe eine eigene Breite zurückzukehren Position zu starten. Wenn ich die Größe der Spalte schnell verändere und die Maustaste loslasse, arbeite ich gut weiter. Also, was ist der Grund für ein solches Verhalten? Warum versucht die Tabelle zu skalieren, selbst wenn getScrollableTracksViewportWidth()
false zurückgibt? Oder vielleicht können Sie eine bessere Lösung für die Implementierung eines solchen Größenänderungsmodus vorschlagen?
Bellow ist ein einfaches Ausführungsbeispiel von oben beschriebenen Problem:
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);
}
});
}
}
Ausgezeichnet, funktioniert gut. – user2137020
Siehe auch: http://stackoverflow.com/questions/15499255/jtable-with-autoresize-horizontal-crolling-and-shrinkable-first-column für eine andere Implementierung. – camickr
Funktioniert wie ein Charme! Die einzige Lösung, die ich gefunden habe, um perfekt zu funktionieren. –