jdk/src/java.desktop/share/classes/javax/swing/text/TableView.java
changeset 44155 1bf93336ea45
parent 32865 f9cb6e427f9e
child 47020 2c55106dc37b
--- a/jdk/src/java.desktop/share/classes/javax/swing/text/TableView.java	Mon Mar 06 10:35:14 2017 -0800
+++ b/jdk/src/java.desktop/share/classes/javax/swing/text/TableView.java	Mon Mar 06 22:52:45 2017 +0300
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
@@ -78,6 +78,7 @@
         super(elem, View.Y_AXIS);
         rows = new Vector<TableRow>();
         gridValid = false;
+        totalColumnRequirements = new SizeRequirements();
     }
 
     /**
@@ -377,6 +378,11 @@
         r.preferred = (int) pref;
         r.maximum = (int) max;
         r.alignment = 0;
+
+        totalColumnRequirements.minimum = r.minimum;
+        totalColumnRequirements.preferred = r.preferred;
+        totalColumnRequirements.maximum = r.maximum;
+
         return r;
     }
 
@@ -406,6 +412,13 @@
      * into consideration any constraining maximums.
      */
     void calculateColumnRequirements(int axis) {
+
+        for (SizeRequirements req : columnRequirements) {
+            req.minimum = 0;
+            req.preferred = 0;
+            req.maximum = Integer.MAX_VALUE;
+        }
+
         // pass 1 - single column cells
         boolean hasMultiColumn = false;
         int nrows = getRowCount();
@@ -576,6 +589,9 @@
 
     int[] columnSpans;
     int[] columnOffsets;
+
+    SizeRequirements totalColumnRequirements;
+
     SizeRequirements[] columnRequirements;
     Vector<TableRow> rows;
     boolean gridValid;
@@ -646,6 +662,53 @@
             invalidateGrid();
         }
 
+        @Override
+        protected SizeRequirements calculateMajorAxisRequirements(int axis, SizeRequirements r) {
+            SizeRequirements req = new SizeRequirements();
+            req.minimum = totalColumnRequirements.minimum;
+            req.maximum = totalColumnRequirements.maximum;
+            req.preferred = totalColumnRequirements.preferred;
+            req.alignment = 0f;
+            return req;
+        }
+
+        @Override
+        public float getMinimumSpan(int axis) {
+            float value;
+
+            if (axis == View.X_AXIS) {
+                value = totalColumnRequirements.minimum + getLeftInset() + getRightInset();
+            } else {
+                value = super.getMinimumSpan(axis);
+            }
+            return value;
+        }
+
+        @Override
+        public float getMaximumSpan(int axis) {
+            float value;
+
+            if (axis == View.X_AXIS) {
+                // We're flexible.
+                value = (float) Integer.MAX_VALUE;
+            } else {
+                value = super.getMaximumSpan(axis);
+            }
+            return value;
+        }
+
+        @Override
+        public float getPreferredSpan(int axis) {
+            float value;
+
+            if (axis == View.X_AXIS) {
+                value = totalColumnRequirements.preferred + getLeftInset() + getRightInset();
+            } else {
+                value = super.getPreferredSpan(axis);
+            }
+            return value;
+        }
+
         /**
          * Perform layout for the major axis of the box (i.e. the
          * axis that it represents).  The results of the layout should