1

JPanel の背景を単なる色ではなく画像に設定する方法があるかどうか疑問に思っています。ありがとう、私は博士に取り組んでいます。ジャワ

4

2 に答える 2

2

1 つのオプションは、ここで行っているように JPanel を拡張することですJavaRanchで同じ基本的な手法を使用した別の (より単純な) 例があります。

于 2009-01-07T18:10:08.290 に答える
0

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); }
    }
于 2009-01-08T08:32:39.950 に答える