--- 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