亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

JButton 圖像渲染不好

JButton 圖像渲染不好

Smart貓小萌 2022-12-15 17:02:18
我正在使用 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);    }}
查看完整描述

2 回答

?
呼啦一陣風

TA貢獻1802條經驗 獲得超6個贊

這個對我有用:


注意,我用圖片創建了兩張圖片和圖標,一張是按鈕的,一張是按下狀態的,表示已經按下了。


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();

        }

    }

}


查看完整回答
反對 回復 2022-12-15
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

我發現“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);

    }


查看完整回答
反對 回復 2022-12-15
  • 2 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號