Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 特定JPanel中添加了不清晰的图像_Java_Image_Swing_Debugging_Jpanel - Fatal编程技术网

Java 特定JPanel中添加了不清晰的图像

Java 特定JPanel中添加了不清晰的图像,java,image,swing,debugging,jpanel,Java,Image,Swing,Debugging,Jpanel,背景信息:我有一个网格布局为(5,7)的JFrame,正在尝试将图像添加到网格为(0,0)的单元格中 我在向特定的JPanel添加图像时遵循了这一点 要在JPanel单元格中显示图像,请执行以下操作: 列表项 将芯片图像放入图像图标中 通过JLabel的setIcon(chipIcon)方法将该图像图标放入JLabel 通过Add(someLabel)方法将JLabel添加到JPanel中,JPanel现在将显示图像 问题 图像被添加到JPanel,但似乎图像放大了很多,然后添加到JPanel

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

我在向特定的JPanel添加图像时遵循了这一点

要在JPanel单元格中显示图像,请执行以下操作:

  • 列表项
  • 将芯片图像放入图像图标中
  • 通过JLabel的setIcon(chipIcon)方法将该图像图标放入JLabel
  • 通过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);
    
    
        }
    
    
    }
    
    封装测试;
    导入java.io.*;
    导入java.util.*;
    导入java.security.*;
    导入javax.xml.bind.DatatypeConverter;
    导入java.lang.*;
    导入java.awt.*;
    导入javax.swing.*;
    导入java.awt.event.*;
    导入java.awt.image.buffereImage;
    导入javax.imageio.imageio;
    公共类测试扩展了JPanel
    {
    公共静态类TestPanel扩展了JPanel
    {
    测试面板()
    {
    int i=5;//行数
    int j=7;//列数
    专家组成员=新JPanel[i][j];
    setLayout(新网格布局(i,j));
    
    对于(int m=0;m最有可能的问题是,您的卡图像大小(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
    并不是缩放图像的最佳选择,请参阅以获得更详细的讨论,并查看其他方法