2

Graphics で XOR モードを使用して、フラットな背景に対してカラーで 1 ビット テクスチャを描画しようとしたときに、Graphics で理解できない動作に遭遇しました。

これは、私が意味することの例です。

package teststuff;

import java.awt.Color;
import java.awt.Graphics;

import javax.swing.JFrame;

public class XORTest extends JFrame {

public XORTest() {
    super("Test");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(500, 400);
    setIgnoreRepaint(true);
    setResizable(false);
    setVisible(true);
    createBufferStrategy(2);
    Graphics graphics = getBufferStrategy().getDrawGraphics();
    graphics.setColor(Color.black);
    graphics.fillRect(0, 0, getWidth(), getHeight());
    graphics.setColor(Color.green);
    graphics.fillRect(30, 40, 100, 200);
    graphics.setXORMode(Color.white);         // (*)
    graphics.fillRect(60, 80, 100, 200);
    graphics.dispose();
    getBufferStrategy().show();
}


public static void main(String[] args) {
    XORTest test = new XORTest();
}
}

(*) でマークされた行のコメントを外すと、期待どおりに 2 つの緑色の四角形が描画されます。そのままにしておくと、コンポーネントには何も描画されず、事前に描画された黒い背景や緑の四角形も描画されません。さらに奇妙なことに、一度は機能しました。以前は白ではなく Color.green の色を使用していました。変更後、期待どおりに描画されました。しかし、アプリケーションを閉じて再度起動すると、機能しなくなり、それ以降も機能しなくなりました。

これはJavaのバグですか?私のjreで?グラフィックスの文書化されていない動作? 私は Windows を使用しており、jdk7 で例を実行しています。

スクリーンショット: 3 つのリンクを投稿できないため、Imgur アルバム

3 番目のスクリーンショットは上記のコードです。1 番目は (*) がコメントされており、2 番目は 1 回の動作時の外観です (スクリーンショットを撮っていないため、GIMP で作成しました)。

4

1 に答える 1