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? ------------- Commit messages: - Refresh the window icon on graphics configuration changes Changes: https://git.openjdk.java.net/jdk/pull/6180/files Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=6180&range=00 Issue: https://bugs.openjdk.java.net/browse/JDK-8276849 Stats: 4 lines in 3 files changed: 4 ins; 0 del; 0 mod Patch: https://git.openjdk.java.net/jdk/pull/6180.diff Fetch: git fetch https://git.openjdk.java.net/jdk pull/6180/head:pull/6180 PR: https://git.openjdk.java.net/jdk/pull/6180