JPanel
をJFrame
に入れました。私はJPanel
に画像をロードしましたが、画像の一部しか表示されませんでした。これは、コードを実行した部分です。
JPanel panelImg = new JPanel()
{
public void paintComponent(Graphics g)
{
Image img = new ImageIcon("Welcome.png").getImage();
Dimension size = new Dimension(img.getWidth(null), img.getHeight(null));
setPreferredSize(size);
setMinimumSize(size);
setMaximumSize(size);
setSize(size);
setLayout(null);
g.drawImage(img, 0, 0, null);
}
};
mainFrame.add(panelImg);
したがって、これは次のようになります。
全体像は次のようになります。
画像をJFrame
sサイズに拡大縮小する方法はありますか?前もって感謝します
まず第一に、私はpaintComponent
メソッド内にイメージをロードしません。このメソッドは繰り返し呼び出されます(そしていくつかの場合はすぐに連続して呼び出されます)。実行に時間がかかることはしたくない、または不必要にリソースを消費する
特定の領域への画像の塗りつぶし/フィットに関する提案については、 Java:JPanel背景画像のアスペクト比を維持する を確認してください。
ターゲットコンテナーにスケーリングする drawImage()
が必要です。代替案については here で引用されている記事を参照してください。例えば、
g.drawImage(img, 0, 0, getWidth(), getHeight(), this);
import Java.awt.Graphics;
import Java.awt.Image;
import javax.swing.JPanel;
public class ImagePanel extends JPanel {
Image image;
public void setBackground(Image image) {
this.image = image;
}
@Override
public void paintComponent(Graphics G) {
super.paintComponent(G);
G.drawImage(image, 0, 0, this.getWidth(), this.getHeight(), null);
}
}
次に、ImagePanelオブジェクトメソッドSetBackground
を使用します。
imagePanel1.SetBackGround(ImageIO.read(new File("extensions/images/background.jpg")));
それは簡単です。この例に従ってください
public class BasePanel extends JPanel {
ImageIcon backImage;
public BasePanel() {
backImage = new ImageIcon("src/images/welcome.png");
}
@Override
protected void paintComponent(Graphics g) {
BufferedImage scaledImage = getScaledImage();
super.paintComponent(g);
g.drawImage(scaledImage, 0, 0, null);
}
private BufferedImage getScaledImage(){
BufferedImage image = new BufferedImage(getWidth(),getHeight(), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = (Graphics2D) image.createGraphics();
g2d.addRenderingHints(new RenderingHints(RenderingHints.KEY_RENDERING,RenderingHints.VALUE_RENDER_QUALITY));
g2d.drawImage(backImage.getImage(), 0, 0,getWidth(),getHeight(), null);
return image;
}
}
あなたはこれを試すことができます:
Image img = new ImageIcon(ImageIO.read(new File("welcome.png"))
.getScaledInstance(WIDTH, HEIGHT, Image.SCALE_SMOOTH)));