为了账号安全,请及时绑定邮箱和手机立即绑定

Java Swing + UI 缩放

Java Swing + UI 缩放

30秒到达战场 2021-06-15 17:01:11
我需要创建一个具有界面缩放功能的应用程序。我有一个带有图标和 jpanel 的按钮,用于保存此按钮。问题是当缩放打开时 - 一个图标模糊,为了解决这个问题,我在paintComponent中使用了缩小。当系统规模打开时,我有正常的图像,结果。但是 JPanel 仍然具有缩放尺寸。我也尝试覆盖 JPanel 的paintComponent,但结果我的按钮太小了,因为按钮上的缩小和JPanel 上的缩小一起工作。我不能仅从 JPanel 使用缩放,当我单击一个按钮时,它会缩放大小并且图像再次模糊。这是一个简单的例子。代码是:public class Test{public static void main(String[] args) throws Exception{    System.setProperty("sun.java2d.uiScale", "1.5");    JFrame j = new JFrame();    Image img = ImageIO.read(new File("D:\\1.png"));    j.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);    j.setPreferredSize(new Dimension(300, 150));    j.setVisible(true);    j.setLocationRelativeTo(null);    j.setLayout(new BorderLayout());    img = img.getScaledInstance((int) (60 * 1.5),(int) (60 * 1.5),Image.SCALE_DEFAULT);    JToggleButton tb = new JToggleButton(){        @Override        protected void paintComponent(Graphics g) {            Graphics2D g2 = (Graphics2D) g;            g2.scale(0.67,0.67);            super.paintComponent(g2);        }    };    tb.setIcon(new ImageIcon(img));    JToggleButton tb2 = new JToggleButton(){        @Override        protected void paintComponent(Graphics g) {            Graphics2D g2 = (Graphics2D) g;            g2.scale(0.67,0.67);            super.paintComponent(g2);        }    };    tb2.setIcon(new ImageIcon(img));    JPanel jPanel = new JPanel(){    };    jPanel.setLayout(new GridLayout(1,1));    jPanel.add(tb);    jPanel.setBackground(Color.RED);    JPanel content = new JPanel();    content.setLayout(new FlowLayout());    content.add(jPanel);    j.setContentPane(content);    j.pack();}我使用 java10。谢谢你。
查看完整描述

1 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

您以 1.5 的缩放因子呈现 UI:所有 UI(包括图标和图像)都经过缩放,以便在高 DPI 显示器上正确显示。如果图像无法缩放,则对于更高的 DPI 设置来说它太小了。

如果您的应用程序支持高 DPI 显示,即UI 缩放,您应该提供不同分辨率的图像。请参阅Java 9 中的MultiResolutionImage

您可以在相关问题的答案中找到示例代码。


查看完整回答
反对 回复 2021-06-17
  • 1 回答
  • 0 关注
  • 484 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信