猿问

JButton 图像渲染不好

我正在使用 Swing 制作一个应用程序,我想在主面板上添加一个带有十字图标的按钮。但是当我在上面绘制图像时,图像呈现得很奇怪。


我已经尝试了几种方法,例如在应用程序外部调整图像大小,并且交叉是用 IllustratorCC 制作的,所以我认为问题不是源图像的质量。


import javax.imageio.*;

import javax.swing.*;

import java.awt.*;

import java.awt.image.BufferedImage;

import java.io.IOException;

import java.net.URL;


public class ImageRenderingBadly extends JPanel

{

    BufferedImage cross;


    public ImageRenderingBadly()

    {

        try {

            URL url = new URL("https://i.imgur.com/cWGntek.png");

            cross = ImageIO.read(url);

        } catch (IOException e) {

            e.printStackTrace();

        }

    }


    @Override

    public void paintComponent(Graphics g)

    {

        g.drawImage(cross,0,0,null);

    }


    public static void main(String[] args)

    {

        JFrame frame = new JFrame();

        frame.setSize(new Dimension(200,200));

        frame.setBackground(new Color(0));


        ImageRenderingBadly panel = new ImageRenderingBadly();


        frame.setContentPane(panel);

        frame.setVisible(true);

    }

}


Smart猫小萌
浏览 107回答 2
2回答

呼啦一阵风

这个对我有用:注意,我用图片创建了两张图片和图标,一张是按钮的,一张是按下状态的,表示已经按下了。import java.awt.Color;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.IOException;import java.net.URL;import javax.imageio.ImageIO;import javax.swing.Icon;import javax.swing.ImageIcon;import javax.swing.JButton;import javax.swing.JOptionPane;import javax.swing.JPanel;public class XButtonTest {    private static final String X_IMG_PATH = "https://i.imgur.com/cWGntek.png";    public static void main(String[] args) {        try {            URL xImgUrl = new URL(X_IMG_PATH);            BufferedImage xImage = ImageIO.read(xImgUrl);            int w = xImage.getWidth();            int h = xImage.getHeight();            BufferedImage pressedImg = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);            Graphics2D g2 = pressedImg.createGraphics();            g2.setColor(Color.LIGHT_GRAY);            g2.fillRect(0, 0, w, h);            g2.drawImage(xImage, 0, 0, null);            g2.dispose();            Icon icon = new ImageIcon(xImage);            Icon pressedIcon = new ImageIcon(pressedImg);            JButton button = new JButton(icon);            button.setPressedIcon(pressedIcon);            button.setBorderPainted(false);            button.setFocusPainted(false);            button.setContentAreaFilled(false);            JPanel panel = new JPanel();            panel.add(button);            JOptionPane.showMessageDialog(null, panel, "Test", JOptionPane.PLAIN_MESSAGE);        } catch (IOException e) {            e.printStackTrace();        }    }}

千万里不及你

我发现“drawImage”渲染的图像很糟糕,这就是我认为的问题:public class Panel extends JPanel{    BufferedImage image;    public Panel() {        super();        try {            image = ImageIO.read(new File("images/BMW-TA.jpg"));        } catch (IOException e) {            e.printStackTrace();        }    }    @Override    public void paintComponent(Graphics g)    {        super.paintComponent(g);        g.drawImage(image, 0, 0, null);    }}资料来源:https ://i.imgur.com/ebr17CV.jpg渲染:https ://i.imgur.com/Z01I7mn.png找到解决方案在 paintComponent 中使用抗锯齿:@Override    public void paintComponent(Graphics g)    {        Graphics2D g2 = (Graphics2D)g;        RenderingHints rh = new RenderingHints(                RenderingHints.KEY_RENDERING,                RenderingHints.VALUE_RENDER_QUALITY);        g2.setRenderingHints(rh);        g2.drawImage(cross,0,0,null);    }
随时随地看视频慕课网APP

相关分类

Java
我要回答