나는 사람들이 반복 나를 미워하는 것 같아요
- 망가
- 클래스 이름은 또한 배경이 무엇인지에 따라
Guikopie
즉 캐피탈 문자로 시작 JFrame의 클래스 확장 예를 들어 JPanel
의 특정 위치에 추가되는 로고가 JLabel
인 경우에 사용됩니다. 그러나 배경으로 사용되는 로고는 그렇지 않습니다. 더 많은 구성 요소가 추가 될 때마다 이동하기 때문에 배경에 구성 요소를 추가하지 말고 구성 요소에 배경을 추가해야합니다. 귀하의 질문에 관해서는
:
내 질문은 왜이 코드가 사진을 표시하지 않습니다?
귀하의 코드는 나를 위해 완벽하게 작동하므로 그림의 위치가 틀립니다.
가 나는
Image
JPanel
에 배경을 추가 한 다음
JFrame
에
JPanel
를 추가하는 방법을 보여주는 간단한 예제를했다, 그것은 또한 크기 조정 사진에 대한 클래스
ImgUtils
을 포함
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class JFrameWithPicture {
public JFrameWithPicture() throws MalformedURLException, IOException {
initComponents();
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
try {
new JFrameWithPicture();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
}
private void initComponents() throws MalformedURLException, IOException {
JFrame frame = new JFrame("Frame with JPanel and background");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final Image background = ImageUtils.scaleImage(300, 300, ImageIO.read(new URL("http://images2.layoutsparks.com/1/98191/naruto-14-red-design.jpg")));
final Dimension jpanelDimensions = new Dimension(new ImageIcon(background).getIconWidth(), new ImageIcon(background).getIconHeight());
frame.add(new JPanel() {
@Override
protected void paintComponent(Graphics grphcs) {
super.paintComponent(grphcs);
grphcs.drawImage(background, 0, 0, this);
}
@Override
public Dimension getPreferredSize() {
return jpanelDimensions;
}
});
frame.setResizable(false);
frame.pack();
frame.setVisible(true);
}
}
class ImageUtils {
public static BufferedImage scaleImage(int width, int height, String filename) {
BufferedImage bi;
try {
ImageIcon ii = new ImageIcon(filename);
bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(ii.getImage(), 0, 0, width, height, null);
} catch (Exception e) {
return null;
}
return bi;
}
static Image scaleImage(int width, int height, BufferedImage filename) {
BufferedImage bi;
try {
bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) bi.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(filename, 0, 0, width, height, null);
} catch (Exception e) {
return null;
}
return bi;
}
}
또는 당신은 할 수 있습니다 Image#getScaledInstance(int width,int height,int hints)을 사용하여 크기를 조정하려면 this has its perils, 주된 문제는 다음과 같습니다.
Image.getScaledInstance()
은 축소 된 이미지를 반환하지 않습니다. 픽셀을 사용하면 많은 시간이 걸릴 수 있습니다.
내 컴퓨터에서 작동했습니다. 이미지 경로를 확인하십시오. – Juvanis
어떤 경로를 택 했습니까? – maximus
"src/icon.png"이것은 내 Java 소스 폴더의 이미지입니다. – Juvanis