<Swing Dev> Review Request for Bug 8146320 JTextField ignores setPreferredSize when having columns

Prem Balakrishnan prem.balakrishnan at oracle.com
Thu Jan 21 10:46:53 UTC 2016


Hi Andrej,

I executed the below test code.
Didn’t find any inconsistent behavior before and after the fix.
Can you give little brief description on the issues, which this fix may give rise to.

Regards,
Prem
I 

-----Original Message-----
From: Andrej Golovnin [mailto:andrej.golovnin at gmail.com] 
Sent: Thursday, January 21, 2016 1:21 PM
To: Prem Balakrishnan
Cc: Sergey Bylokhov; Alexander Scherbatiy; Ambarish Rapte; Rajeev Chamyal; swing-dev at openjdk.java.net
Subject: Re: <Swing Dev> Review Request for Bug 8146320 JTextField ignores setPreferredSize when having columns

Hi all,

as a long time Swing developer I want to vote against this change.
This change may break the layout of existing applications and make them unusable. This code exists for very long time. And it should stay as is. The only change that you should make is to document the current behaviour.

Please run the following application to see what this change may cause:

import java.awt.Dimension;
import java.awt.EventQueue;
import javax.swing.BoxLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.WindowConstants;
import javax.swing.border.EmptyBorder;

/**
 * @author Andrej Golovnin
 */
public class Main {

    public static void main(String... argv) {
        EventQueue.invokeLater(Main::createAndShowUI);
    }

    private static void createAndShowUI() {
        JTextField jdk8 = new JTextField(10);
        jdk8.setPreferredSize(new Dimension(10, 20));

        JTextField jdk9 = new JDK9TextField(10);
        jdk9.setPreferredSize(new Dimension(10, 20));

        JPanel content = new JPanel();
        content.setBorder(new EmptyBorder(10, 10, 10 , 10));
        BoxLayout layout = new BoxLayout(content, BoxLayout.X_AXIS);
        content.setLayout(layout);

        content.add(jdk8);
        content.add(jdk9);

        JFrame frame = new JFrame("Bug 8146320");
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setContentPane(content);
        frame.pack();
        frame.setVisible(true);
    }


    static class JDK9TextField extends JTextField {

        private Dimension prefSize;

        JDK9TextField(int columns) {
            super(columns);
        }

        @Override
        public Dimension getPreferredSize() {
            if (isPreferredSizeSet()) {
                return prefSize;
            }
            return super.getPreferredSize();
        }

        @Override
        public void setPreferredSize(Dimension preferredSize) {
            super.setPreferredSize(preferredSize);
            this.prefSize = preferredSize;
        }

    }

}

Best regards,
Andrej Golovnin



More information about the swing-dev mailing list