Ich habe ein JTable
Objekt, das den gesamten Inhalt einer vorausgewählten MySQL-Tabelle zeigt. Wie Sie wissen, bietet diese Klasse Funktionen wie Spalten - automatische Größenanpassung: Ich möchte eine Prozedur erstellen, die die Summe der Breite aller in der Tabelle enthaltenen Zellen berechnet und den AUTO RESIZE-Modus einschaltet, wenn das Ergebnis geringfügig ist als sein preferredWidth
. Ich habe versucht, Hunderte von Online-Führer zu folgen, aber mein Verfahren nicht funktioniert nach wie vor:Berechnen der breitesten Spalte einer JTable
public void setTableColumnPreferredWidth(javax.swing.JTable aTable)
{
int width = 0;
int TotalWidth = 0;
for (int row = 0; row < aTable.getRowCount(); row++)
{
for (int myColumn=0;myColumn < aTable.getColumnCount();myColumn++)
{
TableCellRenderer renderer = aTable.getCellRenderer(row, myColumn);
Component comp = aTable.prepareRenderer(renderer, row, myColumn);
width = Math.max (comp.getPreferredSize().width, width);
aTable.getColumnModel().getColumn(myColumn).setPreferredWidth(width);
}
}
for (int I=0;I<aTable.getColumnModel().getColumnCount();I++)
TotalWidth += aTable.getColumnModel().getColumn(I).getPreferredWidth();
int maximum = 0;
if (MainTable.getAutoResizeMode() == MainTable.AUTO_RESIZE_ALL_COLUMNS)
maximum = MainTable.getPreferredSize().width;
else
{
int PreviousAutoresize = MainTable.getAutoResizeMode();
MainTable.setAutoResizeMode(MainTable.AUTO_RESIZE_ALL_COLUMNS);
maximum = MainTable.getPreferredSize().width;
MainTable.setAutoResizeMode(PreviousAutoresize);
}
if (maximum < TotalWidth)
MainTable.setAutoResizeMode(MainTable.AUTO_RESIZE_ALL_COLUMNS);
else
MainTable.setAutoResizeMode(MainTable.AUTO_RESIZE_OFF);
}
Vielen Dank für Ihre Aufmerksamkeit.
So wie es jetzt ist, wird der Code der Spalte Breite ändert bevor es die Breite des größten bestimmt, bin ich nicht sicher, ob das ist, was Sie tun möchten. – Titus
Es wurde verwendet, um die Breite von Tabellenspalten zu ändern, ohne sie zu ändern. Beziehen Sie sich auf die automatische Größenanpassung? –
Dies 'aTable.getColumnModel(). GetColumn (myColumn) .setPreferredWidth (width);' ändert die Breite der Spalte und davor haben Sie diese Breite = Math.max (comp.getPreferredSize(). Width, width); Ich denke, es wird verwendet, um die Breite der größten Spalte zu bestimmen. Wenn dies der Fall ist, müssen Sie zunächst die größte Breite ermitteln und erst danach die Breite aller Spalten auf diesen Wert ändern. – Titus