2012-01-21 10 views
3

の下部に滞在するボタンが必要私はもともとmiglayoutフォーラムでこの質問を投稿し、534のビューや無応答の後、私はそこに;-)は私のダイアログ

それをしようとすることを決めた私は、「初期を拡張しようとしましたダイアログの下部に常にある「OK」ボタンを追加するために、MigLayoutホワイトペーパーから「example」を選択します。

は残念ながら、私が見つけた唯一の解決策は、成長する「偽パネル」を追加することでした:

public class TestResize extends JDialog { 
    protected JPanel contentPane; 

    public TestResize() { 
     super((Dialog) null, "Test resize", true); 
     setupUI(); 
     setContentPane(contentPane); 
    } 

    private void setupUI() { 
     contentPane = new JPanel(new MigLayout()); 
     contentPane.add(new JLabel("Enter size:"), ""); 
     contentPane.add(new JTextField(""), "grow, pushx, wrap"); 
     contentPane.add(new JLabel("Enter weight:"), ""); 
     contentPane.add(new JTextField(""), "grow, pushx, wrap"); 
     // fake panel that is allowed to grow 
     contentPane.add(new JPanel(), "span 2, grow, pushy, wrap"); 
     JButton okButton = new JButton("Ok"); 
     JPanel buttonPanel = new JPanel(new MigLayout("", "[center, grow]")); 
     buttonPanel.add(okButton, ""); 
     contentPane.add(buttonPanel, "dock south"); 
    } 

    public static void main(String[] args) { 
     TestResize dialog = new TestResize(); 
     dialog.pack(); 
     dialog.setVisible(true); 
    } 
} 

私は本当にすべてでこのアプローチを好きではない...しかし、より良い方法はありますか?

おかげ

は(私が写真をアップロードすることができないんだけど、私が取得したいUIが表示in my original postであるように見えます)!

new MigLayout(
     "",     // Layout Constraints 
     "[][]",    // Column constraints 
     "[][][]:push[]"); // Row constraints 

cheatsheetの「列/行の制約」を参照してください):2つの行の間で:「プッシュ」あなたは明示的にグリッドにMigLayoutを構築した場合

+0

』成長する:」について残念です*何次に、あなたが明示的にグリッド内の行数を設定する必要はありませんそれ?余分なパネルはネストされたレイアウトではよく使用されます。問題ない。 –

+1

@AndrewThompson高度なLayoutManagerの全体的なアイデアは、ネストされたパネルや接着剤やその他のダミーコンポーネントのようなハックを使用しないことです;-) MigLayoutのネストとダミーコンポーネントは実際にはローレンが感じたように何か間違っていることを示す非常に強いインジケータです – kleopatra

+0

@ kleopatra Ehh ..少しの接着剤とアヒルのテープで間違ったことは何もない。 ;)しかし、もっと真剣に、私はあなたのポイントを参照してください。私はあまりにも大きな画像を見るために、J2SEレイアウトのコアにあまりにも慣れてしまいます。 –

答えて

4

、あなたが持つことができます

編集:

実際には、よりよい解決策は、前の行の末尾に「ラッププッシュ」を使用することです。偽のパネル「残念ながら、私が見つけた唯一の解決策を追加することでした 『*

contentPane.add(new JPanel(), "span 2, grow, pushy, wrap push"); 
+0

はい、まさに私が必要としたものでした:bye "fake panel"ラッセル! –

+0

また、最後のコンポーネント(フレームの一番下にプッシュしたいコンポーネント)で「改行」を使用することもできます。 –