【问题标题】:Java- How can you set a pane's background with an image?Java-如何使用图像设置窗格的背景?
【发布时间】:2009-01-07 18:03:58
【问题描述】:

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

【问题讨论】:

    标签: java background panel jpanel


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-06
        • 2021-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-26
        • 1970-01-01
        • 2021-10-12
        相关资源
        最近更新 更多