mirror of
https://github.com/openjdk/jdk.git
synced 2026-05-07 12:14:55 +00:00
8375573: JTable ignores setPreferredWidth during initial layout when AUTO_RESIZE_LAST_COLUMN is enabled
Reviewed-by: tr
This commit is contained in:
parent
9fef14a6d3
commit
55375e98ae
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 1997, 2025, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1997, 2026, 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
|
||||
@ -3191,9 +3191,23 @@ public class JTable extends JComponent implements TableModelListener, Scrollable
|
||||
* (maximum or minimum).
|
||||
*
|
||||
*/
|
||||
|
||||
public void doLayout() {
|
||||
boolean prefWidthSet = false;
|
||||
TableColumn resizingColumn = getResizingColumn();
|
||||
if (resizingColumn == null) {
|
||||
// doLayout is called for both pack and show
|
||||
// so if initial preferred width is set by user then
|
||||
// it needs to be honoured even if resizingColumn
|
||||
// is set to last column on account of
|
||||
// AUTO_RESIZE_LAST_COLUMN autoResizeMode
|
||||
for (int i = 0; i < columnModel.getColumnCount(); i++) {
|
||||
if (columnModel.getColumn(i).getPreferredWidth() != 75
|
||||
&& columnModel.getColumn(i).getWidth() == 75) {
|
||||
prefWidthSet = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (resizingColumn == null || prefWidthSet) {
|
||||
setWidthsFromPreferredWidths(false);
|
||||
}
|
||||
else {
|
||||
|
||||
87
test/jdk/javax/swing/JTable/TestJTableColWidth.java
Normal file
87
test/jdk/javax/swing/JTable/TestJTableColWidth.java
Normal file
@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Copyright (c) 2026, 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
|
||||
* under the terms of the GNU General Public License version 2 only, as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
* version 2 for more details (a copy is included in the LICENSE file that
|
||||
* accompanied this code).
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License version
|
||||
* 2 along with this work; if not, write to the Free Software Foundation,
|
||||
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
||||
* or visit www.oracle.com if you need additional information or have any
|
||||
* questions.
|
||||
*/
|
||||
|
||||
/*
|
||||
* @test
|
||||
* @bug 8192888
|
||||
* @key headful
|
||||
* @summary Verifies JTable doesn't ignore setPreferredWidth during
|
||||
* initial layout when AUTO_RESIZE_LAST_COLUMN is enabled
|
||||
* @run main TestJTableColWidth
|
||||
*/
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JScrollPane;
|
||||
import javax.swing.JTable;
|
||||
import javax.swing.table.DefaultTableModel;
|
||||
import javax.swing.table.TableColumnModel;
|
||||
import javax.swing.SwingUtilities;
|
||||
|
||||
public class TestJTableColWidth {
|
||||
static JFrame frame;
|
||||
|
||||
public static void main(String[] args) throws Exception {
|
||||
SwingUtilities.invokeAndWait(() -> {
|
||||
try {
|
||||
frame = new JFrame("JTable colwidth");
|
||||
|
||||
String[] cols = {"ID", "Name", "Description", "Status"};
|
||||
Object[][] data = {{1, "Mimi", "Testing Java 25 Regression", "Pending"}};
|
||||
|
||||
DefaultTableModel model = new DefaultTableModel(data, cols);
|
||||
final JTable tab = new JTable(model);
|
||||
|
||||
tab.getTableHeader().setReorderingAllowed(false);
|
||||
tab.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
|
||||
|
||||
TableColumnModel columnModel = tab.getColumnModel();
|
||||
// Defined widths
|
||||
int[] widths = {30, 200, 100, 50};
|
||||
|
||||
for (int i = 0; i < widths.length; i++) {
|
||||
columnModel.getColumn(i).setPreferredWidth(widths[i]);
|
||||
}
|
||||
|
||||
frame.add(new JScrollPane(tab));
|
||||
frame.setSize(600, 200);
|
||||
frame.setLocationRelativeTo(null);
|
||||
frame.setVisible(true);
|
||||
|
||||
System.out.println("Actual column widths on screen:");
|
||||
for (int i = 0; i < columnModel.getColumnCount(); i++) {
|
||||
System.out.println("Column " + i + ": " +
|
||||
columnModel.getColumn(i).getWidth() + "px");
|
||||
}
|
||||
if (columnModel.getColumn(0).getWidth()
|
||||
== columnModel.getColumn(1).getWidth()) {
|
||||
throw new RuntimeException("JTable ignores setPreferredWidth during" +
|
||||
" initial layout when AUTO_RESIZE_LAST_COLUMN is enabled");
|
||||
}
|
||||
} finally {
|
||||
if (frame != null) {
|
||||
frame.dispose();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user