2

私はJFrameいくつかの子JPanelオブジェクトを持っています。JFrame のサイズを変更して大きくすると、すべてが正常に機能し、子パネルのサイズが正しく変更されます。ただし、JFrame を縮小すると、パネルは同じままで、トリミングされます。これは、使用するレイアウトに関係なく発生します。

を使用してサイズを手動で設定できることはわかっていますEventListenerが、私の質問は、なぜこれが起こるのですか? 拡大すると正常に動作するのに、縮小するとうまくいかないのはなぜですか? EventListener(おそらく設定の問題)なしで解決できますか?

関連する場合に備えて、Netbeans 7.3 を使用しています。

====編集====

最小限の例を取得しようとしているときに、問題が追加しようとしているコンポーネントの 1 つであることに気付きました。これは私が作成したものです。バレーボールのコートを伸ばしjava.awt.Canvasて描くオブジェです。

ただし、適切に縮小されない理由を見つけることができませんでした。コードは次のとおりです。

import java.awt.*;
import java.util.Arrays;
import javax.print.attribute.standard.OrientationRequested;

public class CourtCanvas extends Canvas {
    private int courtHeight = 100;
    private int courtWidth = 200;
    private int left = 10;
    private int top = 10;
    private Point center = new Point();

    private Color bgColor = new Color(52, 153, 204);
    private Color lineColor = new Color(255, 255, 255);
    private Color floorColor = new Color(255, 153, 0);

    private OrientationRequested orientation;

    public CourtCanvas() {
        calcDimensions();
        setBackground(bgColor);

        for (int i = 0; i < localCoords.length; i++) {
            localCoords[i] = new Point();
            visitCoords[i] = new Point();
        }
    }

    private void calcDimensions() {
        if (this.getHeight() > this.getWidth()) {
            orientation = OrientationRequested.PORTRAIT;
            courtHeight = (int) Math.min(this.getHeight() * 0.9, this.getWidth() * 1.8);
            courtWidth = (int) (courtHeight / 2.0);
        }
        else {
            orientation = OrientationRequested.LANDSCAPE;
            courtWidth = (int) Math.min(this.getWidth()* 0.9, this.getHeight() * 1.8);
            courtHeight = (int) (courtWidth / 2.0);

        }

        center.x = (int) (getWidth() / 2.0);
        center.y = (int) (getHeight() / 2.0);

        left = (int) (center.x - courtWidth / 2.0);
        top = (int) (center.y - courtHeight / 2.0);
    }

    @Override
    public void paint(Graphics g) {
        setBackground(bgColor);
        calcDimensions();

        drawFloor(g);
        drawLines(g);
    }

    private void drawFloor(Graphics g) {
        g.setColor(floorColor);
        g.fillRect(left, top, courtWidth, courtHeight);
    }

    private void drawLines(Graphics g) {
        if (orientation == OrientationRequested.PORTRAIT) {
            drawLines_Portrait(g);
        }
        else {
            drawLines_Landscape(g);
        }
    }

    private void drawLines_Portrait(Graphics g) {
        g.setColor(lineColor);

        // perimeter
        g.drawRect(left, top, courtWidth, courtHeight);

        // center line
        g.drawLine(left, center.y, left + courtWidth, center.y);

        // local attack line
        g.drawLine(left, center.y + courtHeight / 6, left + courtWidth, center.y + courtHeight / 6);

        // visitor attack line
        g.drawLine(left, center.y - courtHeight / 6, left + courtWidth, center.y - courtHeight / 6);
    }

    private void drawLines_Landscape(Graphics g) {
        g.setColor(lineColor);

        // perimeter
        g.drawRect(left, top, courtWidth, courtHeight);

        // center line
        g.drawLine(center.x, top, center.x, top + courtHeight);

        // local attack line
        g.drawLine(center.x - courtWidth / 6, top, center.x - courtWidth / 6, top + courtHeight);

        // visitor attack line
        g.drawLine(center.x + courtWidth / 6, top, center.x + courtWidth / 6, top + courtHeight);
    }

}
4

2 に答える 2