当前位置: 首页 > 知识库问答 >
问题:

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

徐翔
2023-03-14

背景信息:我有一个gridlayout为(5,7)的JFrame,我试图向(0,0)的单元格网格添加一个图像

我遵循本指南向特定JPanel添加图像。

在 JPanel 单元格中显示图像:

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

问题

图像被添加到JPanel,但看起来图像被放大了很多,然后添加到JPanel。

现实

期望

可编译源代码

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


    }


}

在此处下载图像

注意:由于某些未知原因,您必须清理并重新构建解决方案以进行任何更改,否则它将坚持使用旧代码

共有1个答案

隗高旻
2023-03-14

问题很可能是,您的卡图像大小(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不是缩放图像的最佳选择,请查看图像的危险。GetScaleInstance()进行更详细的讨论,并检查调整大小后的图像质量非常低——Java提供了另一种方法

 类似资料:
  • 问题内容: 将包含图形的添加到时,效果很好。但是,当我尝试添加 其中添加了其他图形的时,它不会显示在中。请参见下面的代码 问题答案: 请注意类的构造函数,使其成为您的习惯,以遵循本示例中所示的顺序。首先向中添加组件,然后再进行调用,例如 ,而不是在此之前。 始终把它当作习惯,每当您覆盖方法时,也要覆盖方法。 并始终像在EDT- 事件调度线程中那样发出呼叫。请阅读Swing中的Concurrency

  • 我正在使用GraphStream库。目前,当我运行我的程序时,它会为我的图形打开新窗口并为我的图形打开单独的窗口。我尝试创建一个并将添加到中,之后我尝试将图形添加到我的中,但它说图形对象不是组件。 这是我的代码: 此程序为和图形打开单独的窗口。我想将我的图形显示在我的或。你知道怎么做吗?我看过这个链接,但它不能很好地解释我。

  • 问题内容: 我有一个JPanel,我想向其中添加即时生成的JPEG和PNG图像。 到目前为止,我在Swing教程中看到的所有示例,特别是在Swing示例中,都使用ImageIcon。 我将这些图像生成为字节数组,它们通常比示例中使用的通用图标大,尺寸为640x480。 使用ImageIcon类在JPanel中显示该大小的图像时是否存在任何(性能或其他)问题? 什么是平常做的呢? 如何不使用Imag

  • 我想添加一个图像到一个JPanel中,JPanel在JInternalFrame中,JInternalFrame有一个父,JDesktopPane。 我尝试使用另一个类从路径添加图像,然后,

  • 我得到了这个面板: 当我将此面板添加到jFrame时,它不会显示图表。 我很有信心,问题在于jPanel实现。 谁能给我一些指点吗。(其他面板到目前为止似乎没有问题)

  • canvas 在绘制的时候,由于浏览器的缩放比例以及现在电脑的高清屏导致绘制的图像不清晰问题。 这篇文章可以分享一下,解决了上述的问题 高清的canvas图像