0

次のコードを使用すると:

    public void paint(Graphics g){

    //Displays version number and name.
    g.setFont(new Font("Courier", Font.PLAIN, 10));
    g.drawString("DCoder " + execute.Execute.version, 2, 10);

    //Displays logo in center.
    g.drawImage(logo, centerAlign(logo.getWidth(null)), 50, this);


}

private int width(){
    //Gets and returns width of applet.
    int width = getSize().width;
    return width;
}
private int height(){
    //Gets and returns height of applet.
    int height = getSize().height;
    return height;
}

private int centerAlign(int obWidth){
    int align = (width()-obWidth)/2;
    return align;
}

Java アプレットでは、(アプレット ビューアー ウィンドウのサイズを変更して) repaint() を呼び出すまで、画像は表示されませんか? 画像が表示されないのはなぜですか?

4

2 に答える 2

2

したがって、非同期でロードされたイメージを処理する必要があります。

logo.getWidth(this); // Indicate asynchronous ImageObserver

..。

@Override
public boolean imageUpdate(Image img,
              int infoflags,
              int x,
              int y,
              int width,
              int height) {
    if ((infoflags & ImageObserver.ALLBITS) == ImageObserver.ALLBITS) {
        // The image is entirely read.
        repaint();
    }
}

画像を非同期で読み取る場合getWidth(null)、幅が決定されるまで0を返します。したがって、少し注意する必要があります。


説明

画像の読み込みは非同期で行われるように設計されています。画像はすでに利用可能ですが、読み取られる前getWidthおよび/またはgetHeight-1です。ImageObserverをgetWidth/getHeightに渡すことができます。これは、画像の読み取り中に通知されます。これで、JAppletはすでにImageObserverになっているので、渡すだけで済みますthis

読み取りコードは、渡された/登録されたImageObserverのメソッドimageUpdateに変更を通知します。幅がわかっていること、SOMEBITS(=すべてではない)なので、JPEGピクセル化プレビューのように、すでにプレビューを描画できます。

この非同期技術は、インターネットが必要とされていた初期の頃のものでした。

画像をもっと簡単に読みたい場合は、を使用してImageIO.read(...)ください。

于 2012-06-05T15:37:04.960 に答える
1

画像が表示されないのはなぜですか?

おそらく、非同期メソッドを使用してロードされたためです。

于 2012-06-05T15:27:32.947 に答える