On Tue, 9 Nov 2021 11:17:27 GMT, Aleksey Shipilev <sh...@openjdk.org> wrote:
>> When a list of icons is set on a window, the most appropiate icon is >> selected depending on the graphics configuration. But if the graphics >> configuration changes (because the window is moved to a different screen, or >> because the DPI settings of the screen is changed), the frame icon isn't >> updated. >> >> Here is an example illustrating the issue: >> >> public static void main(String[] args) throws Exception { >> SwingUtilities.invokeLater(() -> { >> JFrame frame = new JFrame("Window Icon Test"); >> frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); >> frame.setSize(400, 300); >> frame.setVisible(true); >> >> List<Image> images = new ArrayList<>(); >> for (int size = 16; size <= 32; size++) { >> // create an image displaying the size used >> BufferedImage image = new BufferedImage(size, size, >> BufferedImage.TYPE_INT_ARGB); >> Graphics2D g = image.createGraphics(); >> g.setFont(new Font("dialog", Font.BOLD, 12)); >> g.setColor(Color.BLACK); >> g.drawString(String.valueOf(size), 0, size - (size - >> g.getFont().getSize()) / 2); >> images.add(image); >> } >> >> frame.setIconImages(images); >> }); >> } >> >> On Windows if the screen scaling is set to 100% the 16x16 icon is picked >> from the list. If the scaling of the screen is set to 150% while the >> application is running, the 16x16 icon is upscaled and looks blurry. >> >> A way to work around this issue is to listen for graphics configuration >> changes with: >> >> frame.addPropertyChangeListener("graphicsConfiguration", event -> >> frame.setIconImages(frame.getIconImages())); >> >> >> Ideally this should be done automatically by the JDK. Maybe the `WindowPeer` >> could call `updateIconImages()` when `updateGraphicsData()` or >> `displayChanged()` is invoked? > > Submitted the bug for it, please change the PR title to "8276849: Refresh the > window icon on graphics configuration changes" to get it hooked and resolve > the jcheck complaint. @shipilev Thank you for filing the JDK bug ------------- PR: https://git.openjdk.java.net/jdk/pull/6180