2

幅と高さの比率を同じに保ちながら、ユーザーが JFrame の幅/高さのサイズを変更できるようにしたいと考えています。つまり、同じフレーム形状を維持したまま、高さを強制的に変更したいのです。

public void componentResized(ComponentEvent arg0)
    {
        int setHeight = arg0.getComponent().getHeight();
        int setWidth = arg0.getComponent().getWidth();
        double newWidth = 0;
        double newHeight = 0;
        {
            if(setHeight != oldHeight)
            {
                heightChanged = true;
            }
            if(setWidth != oldWidth)
            {
                widthChanged = true;
            }
        }
        {
            if(widthChanged == true && heightChanged == false)
            {
                newWidth = setWidth;
                newHeight = setWidth*HEIGHT_RATIO;
            }
            else if(widthChanged == false && heightChanged == true)
            {
                newWidth = setHeight * WIDTH_RATIO;
                newHeight = setHeight;
            }
            else if(widthChanged == true && heightChanged == true)
            {
                newWidth = setWidth;
                newHeight = setWidth*HEIGHT_RATIO;
            }
        }

        int x1 = (int) newWidth;
        int y1 = (int) newHeight;
        System.out.println("W: " + x1 + " H: " + y1);
        Rectangle r = arg0.getComponent().getBounds();
        arg0.getComponent().setBounds(r.x, r.y, x1, y1);
        widthChanged = false;
        heightChanged = false;
        oldWidth = x1;
        oldHeight = y1;
    }
4

2 に答える 2

2

フレームのサイズが変更されたときに通知するように componentEvent を使用してみてください。フレームのサイズが変更されたときに、どの次元 (x または y) が変更されたかを追跡します。getSize() メソッドを使用してフレームの寸法を取得し、.getWidth() または .getHeight() を使用して、フレームが調整された新しいサイズを取得します。変更されたディメンションの新しいサイズを使用して、他のディメンションの目的のサイズを計算し、.setSize(int width, int height) を使用してフレームのサイズを設定します。

同じサイズ変更で幅と高さの両方を変更すると、問題が発生する可能性があります。

于 2013-11-08T17:48:39.820 に答える