使用 JLabel 添加图像而不损失质量

问题描述 投票:0回答:1

所以我刚刚开始学习 Java(有一些 C++ 经验),但遇到了一些麻烦。我从未创建过 GUI,所以我现在正在尝试它,同时学习 Java。我现在遇到的问题是,我无法找到一种方法如何在不损失质量的情况下使用 JLabel 添加图像。我尝试过的每一种方法,使用 Graphics 2D、Thumbnailator、BufferedImage 都会得到相同的结果。感觉图像失去了原始图像的清晰度。

我一直在寻找解决方案,我确实这样做了,但其中大多数都非常古老或非常难以理解。所以,我寻求帮助,如果可以的话,请像我五岁一样向我解释一下。

这就是我现在导入图像的方法,因为它似乎是最简单的方法。

ImageIcon logo = new 
ImageIcon(this.getClass().getResource("logo.png"));

    logoLabel.setIcon(logo);
    logoLabel.setPreferredSize(new Dimension(logo.getIconWidth(), 
    logo.getIconHeight()));

但我确信还有其他方法。感谢您提前的帮助。

我使用的是 Windows 11 Home 22H2,使用 IntelliJ Community Edition 232.10203.10 和 Java 11.0.20

完整代码:

 import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class GUI implements ActionListener {

    private int count = 0;
    private JLabel label;
    private JFrame frame;
    private JPanel panel;
    private JButton button;
    public GUI() {
        frame = new JFrame();
        button = new JButton("Click me");
        label = new JLabel("Number of clicks: 0");
        panel = new JPanel();
        JLabel logoLabel = new JLabel();
        ImageIcon logo = new ImageIcon(this.getClass().getResource("logo.png"));
        Dimension buttonDim = new Dimension(100, 40);

        logoLabel.setIcon(logo);

        button.addActionListener(this);
        button.setPreferredSize(buttonDim);

        panel.setBorder(BorderFactory.createEmptyBorder(30, 30, 10, 30));
        panel.add(button);
        panel.add(label);
        panel.add(logoLabel);

        frame.setSize(1100, 900);
        frame.add(panel, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setTitle("Our GUI");
        frame.setVisible(true);
    }
    public static void main(String[] args) {
        new GUI();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        count++;
        label.setText("Number of clicks: " + count);
    }
}

原图:

我在 GUI 中得到了什么

我不会调整它的大小或任何东西。

java swing jlabel
1个回答
0
投票

所以,问题实际上出在我自己的系统上。由于我使用的是带有 QHD 屏幕的笔记本电脑,以 100% 缩放比例使用它不太舒服,因此我将其设置为 125%。这就是导致问题的原因。解决方案是向 IDE 添加 VM 选项

-Dsun.java2d.uiScale=1.0

这对我有用。感谢大家提供有关如何解决问题的想法!

© www.soinside.com 2019 - 2024. All rights reserved.