1

サンプルプログラムの最初のタブ:最初の行では、コンポーネントはセル内でrとlで揃えられています。2行目では、セルがスパンされて右に押されています。

最初の行の余分なスペースはすべて、「20」というラベルの付いたコンポーネントを含むセル0,0に割り当てられます。

タブ「2」は、pushxを使用して状況を改善します。ウィジェットは中央に表示されましたが、それは私が望んでいることではありません。

しかし、セル0、1(「30」というラベルの付いたコンポーネントを含むセル)にすべての余分なスペースを与えるにはどうすればよいですか?達成したいことの画像を投稿しようとしましたが、システムはそれを許可しませんでした。うまくいけば、私の口頭での説明は十分に明確です。

package test1;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

import net.miginfocom.swing.MigLayout;

public class Main extends JTabbedPane {

public Main() {
    addTab("One",   createPanel1());
    addTab("Two",   createPanel2());

}
public static void main(String[] args) {
    final JFrame frame = new JFrame("Test MigLayout");
    Main main = new Main();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setContentPane(main);
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            frame.pack();
            frame.setVisible(true);
            frame.setBounds(200, 200, 800, 500);
        }
    });
}

private JPanel createPanel1() {
    JPanel      panel           = new JPanel(new MigLayout("hidemode 3, debug", "[r][l]"));
    JTextField textField1 = new JTextField("20", 20);
    JTextField textField2 = new JTextField("30", 30);
    JButton button = new JButton("Button");
    panel.add(textField1);
    panel.add(textField2, "wrap");
    panel.add(button, "span 2, pushx");
    return (panel);
}
private JPanel createPanel2() {
    JPanel      panel           = new JPanel(new MigLayout("hidemode 3, debug", "[r][l]"));
    JTextField textField1 = new JTextField("20", 20);
    JTextField textField2 = new JTextField("30", 30);
    JButton button = new JButton("Button");
    panel.add(textField1);
    panel.add(textField2, "pushx, wrap");
    panel.add(button, "span 2, pushx");
    return (panel);
}

}
4

1 に答える 1

1

デフォルトではそうではないので、どのセルも水平方向に成長していることに驚いた。プッシュのためにドキュメントを読み直すまで:

コンポーネントが存在する行や列を「重み」で拡大します。これは、列/行の制約に「grow」キーワードを含める代わりに使用できます

ボタンのスパンセルで使用すると、スパンの最初の列に拡大制約が効果的に適用されます。あなたの正確な目標を知らずに、言うことを除いて何もアドバイスするのは難しいです:しないでください:-) 1つのオプションは、2番目の列を明示的に拡大することかもしれません:

JPanel panel = new JPanel(new MigLayout("hidemode 3, debug, wrap 2", "[r][l, grow]"));
JTextField textField1 = new JTextField("20", 20);
JTextField textField2 = new JTextField("30", 30);
JButton button = new JButton("Button");
panel.add(textField1);
panel.add(textField2);
panel.add(button, "span");

余談ですが、私は常に、階層のできるだけ高い位置(レイアウト>行/列>コンポーネント)で制約を定義することをお勧めします-DRYに続いて:-)

于 2013-02-08T09:33:16.313 に答える