4

これは私の最初の試みでBufferStrategyあり、ヒントをいただければ幸いです。

getSize()1) 以下のコードで、ウィンドウのサイズを変更するまで寸法 0 を返すのはなぜですか? ウィンドウのサイズをすぐに検出するにはどうすればよいですか?

2)getSize()ウィンドウのフルサイズではない何かを返すのはなぜですか? IE の下と右に黒い帯があるのはなぜですか?

3) ウィンドウのサイズを変更したときにちらつきをなくす方法はありますか?

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BSTest extends JFrame {
    BufferStrategy bs;
    DrawPanel panel = new DrawPanel();

    public BSTest() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setSize(800,420);
        setLocationRelativeTo(null);
        setIgnoreRepaint(true);
        setVisible(true);
        createBufferStrategy(2);
        bs = getBufferStrategy();
        panel.setIgnoreRepaint(true);
        add(panel);
        panel.drawStuff();
    }

    public class DrawPanel extends JPanel {
        public void drawStuff() {
            while(true) {
                try {
                    Graphics2D g = (Graphics2D)bs.getDrawGraphics();
                    g.setColor(Color.BLACK);
                    System.out.println("W:"+getSize().width+", H:"+getSize().height);
                    g.fillRect(0,0,getSize().width,getSize().height);
                    bs.show();
                    g.dispose();
                    Thread.sleep(20);
                } catch (Exception e) { System.exit(0); }
            }
        }
     }

    public static void main(String[] args) {
        BSTest bst = new BSTest();
    }
}
4

1 に答える 1

5
  1. a のサイズは、が呼び出されるJPanelまで有効ではありません。通常は、含まれている をvalidate()呼び出した結果です。pack()Window

  2. 最終的なサイズは、含まれるコンポーネントの推奨サイズや、特定のルック アンド フィールのパネル UI デリゲートなどの要因の組み合わせの結果です。

  3. JPanelデフォルトでダブルバッファリングされます。それ以上の努力は必要ありません。AnimationTestは一例です。

于 2012-02-25T06:44:31.130 に答える