Java 特定JPanel中添加了不清晰的图像
背景信息:我有一个网格布局为(5,7)的JFrame,正在尝试将图像添加到网格为(0,0)的单元格中 我在向特定的JPanel添加图像时遵循了这一点 要在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
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
并不是缩放图像的最佳选择,请参阅以获得更详细的讨论,并查看其他方法