2017-06-12 28 views
1

私は、\ minimizingを展開するときにアスペクト比を維持できれば良いと思うアプリケーションを作成しています。最小サイズを1000x800に設定し、この比率を5:4に維持したいと考えています。JFrameのアスペクト比を維持する方法

すでに方法がありますか、フレームがサイズ変更されているかどうかを確認するイベントハンドラを自分で追加する必要がありますか?

PS.Ifの質問は、私は申し訳ありませんが繰り返され、私はそれ

EDIT

を見つけることができなかったあなたに、私はこれを行うに役立つすべての人に感謝します。ここでは、大きすぎたり小さすぎたりせずに使用されている画面のサイズに合わせてアプリケーションのサイズを維持し、縦横比を維持する方法を示します。 乾杯

int width = frame.getBounds().width; 
GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 
if (width > gd.getDisplayMode().getWidth()) 
    width = gd.getDisplayMode().getWidth(); 
while (width*4/5 > gd.getDisplayMode().getHeight()) 
    width = (int) (width - width*0.1); 
frame.setBounds(frame.getBounds().x, frame.getBounds().y, width, width*4/5); 
+1

確かに、コンテンツのアスペクト比を維持する方が簡単で簡単ですが、システムによってウィンドウが最大化されたときに発生する可能性のある奇妙さを取り除きます:P – MadProgrammer

+0

@MadProgrammerフレームが奇妙に見える、またフレーム以外のすべてのコンポーネントのサイズがレイアウトマネージャによって設定されているので、それが可能であるかわからない場合もあります –

+1

だから?最初に、単一のコンテナの比率を維持することに焦点を当てたレイアウトマネージャを考案し、そのコンテナに残りのコンポーネントを追加してください。 – MadProgrammer

答えて

2

これを試してみてください:

@Override 
public void componentResized(ComponentEvent arg0) { 
    int W = 4; 
    int H = 3; 
    Rectangle b = arg0.getComponent().getBounds(); 
    arg0.getComponent().setBounds(b.x, b.y, b.width, b.width*H/W); 
} 
+0

どのクラスで上書きされますか? 'JFrame'(とその親クラス)はこのメソッドを実装していません – MadProgrammer

+0

formComponentResized(java.awt.event.ComponentEvent evt){} – Shaine

+0

何らかのフォームエディタを使用していないと仮定できます – MadProgrammer

関連する問題