【发布时间】:2009-01-07 18:03:58
【问题描述】:
我想知道是否有任何方法可以将 JPanel 的背景设置为图像而不仅仅是颜色。谢谢,我正在研究博士。爪哇
【问题讨论】:
标签: java background panel jpanel
我想知道是否有任何方法可以将 JPanel 的背景设置为图像而不仅仅是颜色。谢谢,我正在研究博士。爪哇
【问题讨论】:
标签: java background panel jpanel
您可以继承 JPanel - 这是我的 ImagePanel 的摘录,它将图像放置在 5 个位置中的任何一个,顶部/左侧、顶部/右侧、中间/中间、底部/左侧或底部/右侧:
public void setImage(Image img, int vs, int hs) {
mmImage=img;
mmVrtShift=vs;
mmHrzShift=hs;
mmSize=(img!=null ? new Dimension(img.getWidth(null),img.getHeight(null)) : null);
}
public void setTopLeftImage(Image img, int vs, int hs) {
tlImage=img;
tlVrtShift=vs;
tlHrzShift=hs;
tlSize=(img!=null ? new Dimension(img.getWidth(null),img.getHeight(null)) : null);
}
public void setTopRightImage(Image img, int vs, int hs) {
trImage=img;
trVrtShift=vs;
trHrzShift=hs;
trSize=(img!=null ? new Dimension(img.getWidth(null),img.getHeight(null)) : null);
}
public void setBottomLeftImage(Image img, int vs, int hs) {
blImage=img;
blVrtShift=vs;
blHrzShift=hs;
blSize=(img!=null ? new Dimension(img.getWidth(null),img.getHeight(null)) : null);
}
public void setBottomRightImage(Image img, int vs, int hs) {
brImage=img;
brVrtShift=vs;
brHrzShift=hs;
brSize=(img!=null ? new Dimension(img.getWidth(null),img.getHeight(null)) : null);
}
...
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); }
}
【讨论】: