Anında oluşturduğum JPEG ve PNG görüntülerini eklemek istediğim bir JPanel var.
Şimdiye kadar Swing Tutorials'de, özellikle Swing examples'de gördüğüm tüm örnekler ImageIcon
kullanıyor.
Bu görüntüleri bayt dizileri olarak oluşturuyorum ve genellikle örneklerde kullandıkları 640x480 boyutundaki ortak simgeden daha büyük oluyorlar.
Edit: Eğitimlerin ve API'nin daha dikkatli bir incelemesi, bir JPanel'e doğrudan bir ImageIcon ekleyemeyeceğinizi göstermektedir. Bunun yerine, görüntüyü bir JLabel'in simgesi olarak ayarlayarak aynı etkiyi elde ederler. Bu sadece doğru gelmiyor...
İşte bunu nasıl yaptığım (bir görüntünün nasıl yükleneceği hakkında biraz daha fazla bilgi ile):
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
import javax.swing.JPanel;
public class ImagePanel extends JPanel{
private BufferedImage image;
public ImagePanel() {
try {
image = ImageIO.read(new File("image name and path"));
} catch (IOException ex) {
// handle exception...
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 0, 0, this); // see javadoc for more info on the parameters
}
}
ImageIcon
kullanırdım. Tek bir resim için, JPanel
in özel bir alt sınıfını oluşturmayı ve resmi çizmek için paintComponent
yöntemini geçersiz kılmayı düşünürdüm.JPanel alt sınıfını kullanabilirsiniz - burada, bir görüntüyü üst/sol, üst/sağ, orta/orta, alt/sol veya alt/sağ olmak üzere 5 konumdan herhangi birine yerleştiren ImagePanel'imden bir alıntı var:
protected void paintComponent(Graphics gc) {
super.paintComponent(gc);
Dimension cs=getSize(); // component size
gc=gc.create();
gc.clipRect(insets.left,insets.top,(cs.width-insets.left-insets.right),(cs.height-insets.top-insets.bottom));
if(mmImage!=null) { gc.drawImage(mmImage,(((cs.width-mmSize.width)/2) +mmHrzShift),(((cs.height-mmSize.height)/2) +mmVrtShift),null); }
if(tlImage!=null) { gc.drawImage(tlImage,(insets.left +tlHrzShift),(insets.top +tlVrtShift),null); }
if(trImage!=null) { gc.drawImage(trImage,(cs.width-insets.right-trSize.width+trHrzShift),(insets.top +trVrtShift),null); }
if(blImage!=null) { gc.drawImage(blImage,(insets.left +blHrzShift),(cs.height-insets.bottom-blSize.height+blVrtShift),null); }
if(brImage!=null) { gc.drawImage(brImage,(cs.width-insets.right-brSize.width+brHrzShift),(cs.height-insets.bottom-brSize.height+brVrtShift),null); }
}