2017-03-22 14 views
0

JFrameは、特定のサイズより小さくすることはできません。また、要素を適切にレイアウトできません。JFrameの最小サイズを設定して、ユーザーのサイズを小さくするのを止めるにはどうすればよいですか?

私はこのフレームのgetMinimumSize()メソッドを上書きしようとしましたが、私はまだフレームを小さくするようにサイズ変更することができます。

componentListenerの範囲の変更を聞く必要があります。componentResized()の場合は、setBounds()で通常のサイズに戻しますか?

+0

これはうまくいきました。少なくとも、Linux上で動作します。 Cf http://stackoverflow.com/questions/2781939/setting-minimum-size-limit-for-a-window-in-java-swing?rq=1既に議論されている –

+0

はい、リンクありがとうございます。今、この質問で、私たちはAndrewからより良い解決策を得ました。 – FaithReaper

答えて

6

をリサイズ避けるために、フレームの初期化にプロパティの下に使ってみて、間違って/あなたのコード内で何が起こっているかを伝えるのは難しいです。可能であれば、setMinimumSize(..)という呼出しが間違った時刻に、および/または間違った値で発生している可能性があります。

ここでは、このコードではフレームが最初に表示されるよりも小さくなることはできませんが、ユーザーはそれを大きくドラッグできます。コメントのヒントを確認してください。

import java.awt.*; 
import javax.swing.*; 
import javax.swing.border.EmptyBorder; 

public class MinimumSizeFrame { 

    private JComponent ui = null; 

    MinimumSizeFrame() { 
     initUI(); 
    } 

    public void initUI() { 
     ui = new JPanel(new BorderLayout(4,4)); 

     JLabel label = new JLabel("Text in big label"); 
     label.setBorder(new EmptyBorder(40, 100, 40, 100)); 
     ui.add(label); 
    } 

    public JComponent getUI() { 
     return ui; 
    } 

    public static void main(String[] args) { 
     Runnable r = new Runnable() { 
      @Override 
      public void run() { 
       MinimumSizeFrame o = new MinimumSizeFrame(); 

       JFrame f = new JFrame(o.getClass().getSimpleName()); 
       f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
       f.setLocationByPlatform(true); 

       f.setContentPane(o.getUI()); 
       f.pack(); // have the JVM calculate the ideal size of this GUI 
       f.setMinimumSize(f.getSize()); // now use that as minimum! 

       f.setVisible(true); 
      } 
     }; 
     SwingUtilities.invokeLater(r); 
    } 
} 
+0

OK、 'pack()'の後に 'setMinimumSize()'を呼び出します。それは私の状況で働いている。それは、Java Swingについての私の自信を後押しします。どうもありがとう! – FaithReaper

2

あなたがコンパイルコードの欠如と

setResizable(false); 
+2

次に、最小サイズと最大サイズの間の柔軟性が失われます。 –

関連する問題