CoderFunda
  • Home
  • About us
    • Contact Us
    • Disclaimer
    • Privacy Policy
    • About us
  • Home
  • Php
  • HTML
  • CSS
  • JavaScript
    • JavaScript
    • Jquery
    • JqueryUI
    • Stock
  • SQL
  • Vue.Js
  • Python
  • Wordpress
  • C++
    • C++
    • C
  • Laravel
    • Laravel
      • Overview
      • Namespaces
      • Middleware
      • Routing
      • Configuration
      • Application Structure
      • Installation
    • Overview
  • DBMS
    • DBMS
      • PL/SQL
      • SQLite
      • MongoDB
      • Cassandra
      • MySQL
      • Oracle
      • CouchDB
      • Neo4j
      • DB2
      • Quiz
    • Overview
  • Entertainment
    • TV Series Update
    • Movie Review
    • Movie Review
  • More
    • Vue. Js
    • Php Question
    • Php Interview Question
    • Laravel Interview Question
    • SQL Interview Question
    • IAS Interview Question
    • PCS Interview Question
    • Technology
    • Other

30 December, 2023

Java Swing Graphics are drawned inconsistently when system scale is 125% in a scrollpane

 Programing Coderfunda     December 30, 2023     No comments   

at 100% screen scaling the drawn shape is always "pixel perfect".





at 125% screen scaling the same shape in this case it's sometimes drawn as if it has an extra row of pixels on the top (1) instead of the way it should be drawned (2). These shapes are drawned in a list in a scrollpane and while scrolling up and down, they flicker, changing from one version to the other and it's very apparent and distracting.





This I've observed being dependant on the component position, and perhaps I suppose it draws the shape inbetween 2 pixels and so it "randomly" chooses either the pixel above for one component or the one below for another one...
package debug;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridLayout;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
import javax.swing.border.EmptyBorder;

public class TestBugScaling implements Runnable {

private final int size = 38;

public static void main(String[] args) {
SwingUtilities.invokeLater(new TestBugScaling());
}

@Override
public void run() {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setPreferredSize(new Dimension(400, 400));

Container contentPane = frame.getContentPane();
contentPane.setLayout(new BorderLayout());
contentPane.setPreferredSize(new Dimension(400, 400));

JScrollPane scrollPane = new JScrollPane();
scrollPane.setPreferredSize(new Dimension(size + 10, 400));
scrollPane.getVerticalScrollBar().setUnitIncrement(size + 5);
scrollPane.getVerticalScrollBar().setBlockIncrement((size + 5) * 2);

JPanel container = new JPanel();
container.setBorder(new EmptyBorder(5, 5, 5, 5));
container.setLayout(new GridLayout(20, 0, 0, 5));
container.setPreferredSize(new Dimension(size + 10, (size + 5) * 20));

container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());
container.add(new CirclePanel());

scrollPane.setViewportView(container);

contentPane.add(scrollPane, BorderLayout.NORTH);

frame.pack();
frame.setVisible(true);
}

public class CirclePanel extends JPanel {

public CirclePanel() {
super();
setPreferredSize(new Dimension(size, size));
setMinimumSize(new Dimension(size, size));
setMaximumSize(new Dimension(size, size));
}

@Override
public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D) g.create();
g2.fillOval(0, 0, getHeight(), getHeight());
g2.dispose();
}

}

}



With this code, if you have 100% screen scale, you will see a smooth scrolling of the circles.
Instead, with a 125% screen scale, if you look closely you will see the circles bobbing up and down 1 pixel out of place while scrolling...


Is there a way to prevent / fix this? what is causing it?


I don't mind the shape not being completely perfect, but I do mind that it flickers and that it's not consistent all the time...
  • Share This:  
  •  Facebook
  •  Twitter
  •  Google+
  •  Stumble
  •  Digg
Email ThisBlogThis!Share to XShare to Facebook
Newer Post Older Post Home

0 comments:

Post a Comment

Thanks

Meta

Popular Posts

  • How to monitor process status during process lifetime
    I need to track the process status ps axf during executable lifetime. Let's say I have executable main.exec and want to store into a fi...
  • How to use Filament 3 with Laravel 11 | Beginner Course
    How to install filament 3 from scratch with Laravel 11. submitted by /u/Tilly-w-e [link] [comments]
  • How to Run a Python File on a Specific Virtual Desktop Only?
    I want to run a Python script on a specific virtual desktop without affecting other desktops. Currently, when I execute my Python file us...
  • How to create a responsive circle with two lines of text in HTML and CSS?
    body { display: flex; justify-content: center; align-items: center; gap: 15px; } .circle { display: flex; flex-direction: col...
  • Clang not generating debug info on -g flag
      1 Answer Active     Oldest  Votes 5 On Windows, Clang is not self-sufficient (at least not the official binaries). You need to have either...

Categories

  • Ajax (26)
  • Bootstrap (30)
  • DBMS (42)
  • HTML (12)
  • HTML5 (45)
  • JavaScript (10)
  • Jquery (34)
  • Jquery UI (2)
  • JqueryUI (32)
  • Laravel (1017)
  • Laravel Tutorials (23)
  • Laravel-Question (6)
  • Magento (9)
  • Magento 2 (95)
  • MariaDB (1)
  • MySql Tutorial (2)
  • PHP-Interview-Questions (3)
  • Php Question (13)
  • Python (36)
  • RDBMS (13)
  • SQL Tutorial (79)
  • Vue.js Tutorial (69)
  • Wordpress (150)
  • Wordpress Theme (3)
  • codeigniter (108)
  • oops (4)
  • php (853)

Social Media Links

  • Follow on Twitter
  • Like on Facebook
  • Subscribe on Youtube
  • Follow on Instagram

Pages

  • Home
  • Contact Us
  • Privacy Policy
  • About us

Blog Archive

  • July (4)
  • September (100)
  • August (50)
  • July (56)
  • June (46)
  • May (59)
  • April (50)
  • March (60)
  • February (42)
  • January (53)
  • December (58)
  • November (61)
  • October (39)
  • September (36)
  • August (36)
  • July (34)
  • June (34)
  • May (36)
  • April (29)
  • March (82)
  • February (1)
  • January (8)
  • December (14)
  • November (41)
  • October (13)
  • September (5)
  • August (48)
  • July (9)
  • June (6)
  • May (119)
  • April (259)
  • March (122)
  • February (368)
  • January (33)
  • October (2)
  • July (11)
  • June (29)
  • May (25)
  • April (168)
  • March (93)
  • February (60)
  • January (28)
  • December (195)
  • November (24)
  • October (40)
  • September (55)
  • August (6)
  • July (48)
  • May (2)
  • January (2)
  • July (6)
  • June (6)
  • February (17)
  • January (69)
  • December (122)
  • November (56)
  • October (92)
  • September (76)
  • August (6)

Loading...

Laravel News

Loading...

Copyright © CoderFunda | Powered by Blogger
Design by Coderfunda | Blogger Theme by Coderfunda | Distributed By Coderfunda