Java-如何使用图像设置窗格的背景?

发布于 2024-07-12 09:44:17 字数 62 浏览 6 评论 0原文

我想知道是否有任何方法可以将 JPanel 的背景设置为图像而不仅仅是颜色。 谢谢,我正在研究博士。 爪哇

I'm wondering if there is any way to set a JPanel's background to an image instead of just a colour. Thanks and I'm working on dr. java

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

如何视而不见 2024-07-19 09:44:17

一种选择是像此处那样扩展 JPanel。 JavaRanch 上还有另一个(更简单的)示例,使用相同的基本技术。

One option is to extend JPanel as they do here. There's another (simpler) example using the same basic technique on JavaRanch.

誰認得朕 2024-07-19 09:44:17

您可以对 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); }
    }

You can subclass JPanel - here is an extract from my ImagePanel, which puts an image in any one of 5 locations, top/left, top/right, middle/middle, bottom/left or bottom/right:

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); }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文