From ad5fb20262bb43dc004177446fbfdbbd86762d6c Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Thu, 27 Aug 2015 15:26:44 +0200 Subject: [client] TableColumnAdjuster: Use weighted scaling, so one very wide entry won't make the column too wide --- .../dozmod/gui/helper/TableColumnAdjuster.java | 26 +++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) (limited to 'dozentenmodul/src/main/java/org/openslx') diff --git a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableColumnAdjuster.java b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableColumnAdjuster.java index 9b1ca7d6..2066791f 100644 --- a/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableColumnAdjuster.java +++ b/dozentenmodul/src/main/java/org/openslx/dozmod/gui/helper/TableColumnAdjuster.java @@ -113,19 +113,32 @@ public class TableColumnAdjuster implements PropertyChangeListener, TableModelLi * column. */ private int getColumnDataWidth(int column) { - if (!isColumnDataIncluded) + if (!isColumnDataIncluded || table.getRowCount() == 0) return 0; int preferredWidth = 0; int maxWidth = table.getColumnModel().getColumn(column).getMaxWidth(); + int[] colWidth = new int[table.getRowCount()]; + int avg = 0; - for (int row = 0; row < table.getRowCount(); row++) { - preferredWidth = Math.max(preferredWidth, getCellDataWidth(row, column)); + for (int row = 0; row < colWidth.length; row++) { + colWidth[row] = getCellDataWidth(row, column); + avg += colWidth[row]; + } + avg /= colWidth.length; + int upperCap = avg * 3 + 20; + for (int row = 0; row < colWidth.length; row++) { + if (colWidth[row] > upperCap) { + return upperCap; + } + if (colWidth[row] > preferredWidth) { + preferredWidth = colWidth[row]; + } // We've exceeded the maximum width, no need to check other rows - - if (preferredWidth >= maxWidth) + if (preferredWidth >= maxWidth) { break; + } } return preferredWidth; @@ -321,7 +334,8 @@ public class TableColumnAdjuster implements PropertyChangeListener, TableModelLi /* * Update the input and action maps with new ToggleAction */ - private void installToggleAction(boolean isToggleDynamic, boolean isToggleLarger, String key, String keyStroke) { + private void installToggleAction(boolean isToggleDynamic, boolean isToggleLarger, String key, + String keyStroke) { Action action = new ToggleAction(isToggleDynamic, isToggleLarger); KeyStroke ks = KeyStroke.getKeyStroke(keyStroke); table.getInputMap().put(ks, key); -- cgit v1.2.3-55-g7522