1

Graphics2D オブジェクトの BasicStroke を 1 以外に変更すると、起動時に JPanel の中央に何も描画されません。

これは、JFrame 上にある JPanel です。これは私のプロジェクトの基本的な考え方ですが、すべてではありません。

public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    if(this.centered){
        this.myShape.setCenterX(this.getWidth()/2);
        this.myShape.setCenterY(this.getHeight()/2);
    }
    g2.setStroke(new BasicStroke(3)); //new BasicStroke(1) works fine
    g2.draw(this.myShape);
}

myShape をクリックしてドラッグすると、myShape はすぐに中央にジャンプします。しかし、最初にコンパイルして実行すると、ストロークが 1 でない場合、paintComponent() は画面の中央から約 1 センチ上にペイントします。

センタリングの仕方に問題がありますか?MyShape クラスを定義したので、エラーが発生する可能性があります。中心から描画点までの距離は、JPanel と JFrame の上部の間のスペースでしょうか? どうすれば修正できますか?

編集:写真を追加しました

http://s21.postimage.org/dfpmz73et/Untitled_1.png 最初の形状は、私が望む場所にあります。他の2つは、私が望む場所の上にあります。しかし、ストロークのサイズに関係なく、中心からの変位は同じようです。

4

1 に答える 1

1

はい、これはシェイプの通常の動作だと思います。1ピクセルの輪郭を想定しています。したがって、基本的なストロークサイズを変更することがわかっている場合は、中心の計算を変更する必要があります。何かのようなもの:

public void paintComponent(Graphics g) {
    Graphics2D g2 = (Graphics2D) g;
    BasicStroke stroke = new BasicStroke(3);
    int adjustment = stroke.getLineWidth() - 1;

    if(this.centered){
        this.myShape.setCenterX(this.getWidth() + adjustment / 2);
        this.myShape.setCenterY(this.getHeight() + adjustment / 2);
    }
    g2.setStroke(stroke);
    g2.draw(this.myShape);
}
于 2013-03-17T19:32:53.307 に答える