2

createVerticalGlue()を何度も正常に使用しました。ただし、次の画面構築コードでは機能していません。私はまだなぜだろうと思っています。

別のパネル(centralPanel)内に2つのJPanel(leftPanel、rightPanel)があるという状況です。これらの2つのパネルはそれぞれ、BoxLayoutY軸を使用して2つのJComponentをホストします。2つのJComponentの前、間、および後に残りの空き領域を分散させたい。

私は問題を解決するために空の境界線と剛体の領域を使用できることを知っていますが、私は少し頭がおかしいことが起こります!

長い質問をお詫びします。

    public class MemberGUI extends JFrame {
        JPanel contPane = (JPanel) this.getContentPane();
        JPanel centralPanel = new JPanel();
        JPanel leftPanel = new JPanel();
        JPanel rightPanel = new JPanel();
        JPanel lowerPanel = new JPanel();

        JLabel title = new JLabel("Add/Delete Member");
        JLabel nameLbl = new JLabel("Member's name");
        JLabel idLbl = new JLabel ("Member ID");

        JTextField nameFld = new JTextField(10);
        JTextField idFld = new JTextField(10);


    public void buildMe(){
        //LayoutManagers
        contPane.add(title,BorderLayout.PAGE_START);
        contPane.add(centralPanel,BorderLayout.CENTER);
        contPane.add(lowerPanel,BorderLayout.PAGE_END);

        centralPanel.add(leftPanel);
        centralPanel.add(rightPanel);

        leftPanel.setLayout(new BoxLayout(leftPanel,BoxLayout.Y_AXIS));
        rightPanel.setLayout(new BoxLayout(rightPanel,BoxLayout.Y_AXIS));

        //leftPanel.add(Box.createRigidArea(new Dimension(0,50)));
        leftPanel.add(Box.createVerticalGlue());
        leftPanel.add(idLbl);
        leftPanel.add(Box.createVerticalGlue());
        leftPanel.add(nameLbl);
        leftPanel.add(Box.createVerticalGlue());

        //rightPanel.add(Box.createRigidArea(new Dimension(0,50)));
        rightPanel.add(Box.createVerticalGlue());
        rightPanel.add(idFld);
        rightPanel.add(Box.createVerticalGlue());
        rightPanel.add(nameFld);
        rightPanel.add(Box.createVerticalGlue());


        // JFrame Settings
        this.setSize(500,400);
        this.setResizable(false);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
        this.setVisible(true);   

        }
    }
4

1 に答える 1

3

afaics、centralPanelにはデフォルトのlayoutManagerがあります。これはFlowLayoutです。これは常に子のサイズをprefSizeに合わせるため、接着剤が機能することはありません。

コンテナのネストには代償が伴います(@Andrewのようなネストウィザードは喜んで支払います:-)また、正しく行うのは簡単ではありません(fiは上部のtextFieldをcomboBoxに置き換えて位置ずれを確認します)。長期的には、fi MigLayout(私の現在の個人的なお気に入り)のような、より強力なマネージャーを習得することを学ぶ道はほとんどありません。

于 2012-08-21T06:38:55.527 に答える