java - 添加到特定 JPanel 的图像不清晰

标签 java image swing debugging jpanel

背景信息:我有一个网格布局为 (5,7) 的 JFrame,并尝试将图像添加到 (0,0) 的单元格网格

我正在关注这个guide将图像添加到特定的 JPanel 。

要在 JPanel 单元格中显示图像:

  1. 列出项目
  2. 将芯片图像放入 ImageIcon
  3. 通过 JLabel 的 setIcon(chipIcon) 方法将该 ImageIcon 放入 JLabel
  4. 通过 add(someLabel) 方法将 JLabel 添加到 JPanel - JPanel 现在将显示图像。

问题

图像已添加到 JPanel,但图像似乎被放大很多,然后添加到 JPanel。

现实

enter image description here

期望

enter image description here

可编译的源代码

package testing;

import java.io.*;
import java.util.*;
import java.security.*;
import javax.xml.bind.DatatypeConverter;
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;


public class Testing extends JPanel 
{

    public static class TestPanel extends JPanel
{
    TestPanel()
    {
        int i = 5; // num of rows
        int j = 7; // num of cols

        PanelHolder = new JPanel[i][j];
        setLayout(new GridLayout(i,j));

        for (int m=0 ; m<i;m++)
        {
            for(int n=0;n<j;n++)
            {
                PanelHolder[m][n] = new JPanel();
                add(PanelHolder[m][n]);
            }
        }





        ImageIcon ic1 = new ImageIcon("./src/testing/Ace_Diamond_1_1.png");
        JLabel jl1 = new JLabel();
        jl1.setIcon(ic1);
        PanelHolder[0][0].add(jl1);



    }
      JPanel [][] PanelHolder;

    JLabel DeckLabel;
    JPanel DeckPanel;
    ImageIcon Deckimg;

    private BufferedImage image;
    BufferedImage image2;

}


public static class ImagePanel extends JPanel
{
    ImagePanel(BufferedImage image)
    {
        this.i = image;

    }


    public void paintComponent(Graphics g)
    {
        super.paintComponent(g);

        g.drawImage(i,0,0, getWidth(), getHeight(), this);



    }


    BufferedImage i;
}




    public static void main(String[] args) 
    {
        TestPanel tp = new TestPanel();

        JFrame frame = new JFrame();

        frame.add(tp);
        frame.pack();
        frame.setVisible(true);


    }


}

下载图片here

注意:由于某种未知的原因,您必须清理并重建您所做的任何更改的解决方案,否则它将坚持旧代码

最佳答案

最有可能的问题是,您的卡片图像尺寸 (691x963) 对于您的手机来说太大。这将使您的主框架至少宽 3455 像素,高 6741 像素...:P

您需要缩小原始图像的尺寸或动态缩放它,例如......

BufferedImage card = ImageIO.read(getClass().getResource("/Ace_Diamond_1_1.png"));
Image scaledInstance = card.getScaledInstance(100, -1, Image.SCALE_SMOOTH);
JLabel jl1 = new JLabel(new ImageIcon(scaledInstance));

我应该指出,在缩放图像时,getScaledInstance 并不是最佳选择,请参阅 The Perils of Image.getScaledInstance()如需更详细的讨论,请查看 Quality of Image after resize very low -- Java另一种方法

关于java - 添加到特定 JPanel 的图像不清晰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23258988/

相关文章:

java - findViewById 出现问题,用图表解释

java - 通过 http 运行 livy 作业而无需每次都上传 jar

java - 使用invokeLater或invokeAndWait等待来自另一个GUI的响应

java - JFileChooser.getSelectedFile() 实现自定义操作按钮时返回 null

java - JMenuBar抽象按钮工厂不添加按钮

每个循环工作的 Java

FireFox 中的 Java 错误 - myApplet.myFunction 不是函数

html - 悬停背景,前面有图像

html - 为什么画廊中的这些图像是 'shifted' 或 'bumped' ?

Java-通过MouseListener获取特定像素的强度值