GridBagLayoutのとJavaのサイドバー
-
19-09-2019 - |
質問
私は、私が働いているプロジェクトのためにサイドバーを描画しようとしています。私はBoxLayoutの制限がイライラになったので、私はGridBagLayoutのを使用することにしました。誰かが私が間違っているのか説明を助けることができます。私が欲しいのは2のJPanelを格納するためのサイドバー用です。私が持っているコードは、途中で、サイドバーの下の代わりに、上部に配置します。誰かが私がここで行方不明です何を説明することができます。
JPanel sideBar = new JPanel();
sideBar.setBounds(0, 0, 180, (int)this.getBounds().getHeight());
sideBar.setLayout(new GridBagLayout());
JPanel optionBar = new JPanel();
optionBar.setBorder(BorderFactory.createTitledBorder("Box1"));
optionBar.setLayout(new GridBagLayout());
JPanel buttonBar = new JPanel();
buttonBar.setBorder(BorderFactory.createTitledBorder("Options"));
buttonBar.setLayout(new GridBagLayout());
GridBagConstraints c = new GridBagConstraints();
c.fill = GridBagConstraints.HORIZONTAL;
c.gridx = 0;
c.ipady = 5;
c.insets = new Insets(10,0,0,0);
JButton simplify;
simplify = new JButton("Open");
simplify.addActionListener( this.listener );
c.gridy = 0;
buttonBar.add(simplify, c);
JButton mergeButton;
mergeButton = new JButton("Close");
mergeButton.addActionListener( this.listener );
c.gridy = 1;
buttonBar.add(mergeButton, c);
JButton splitButton;
splitButton = new JButton("Merge");
splitButton.addActionListener( this.listener );
c.gridy = 2;
buttonBar.add(splitButton, c);
c.insets = new Insets(0,5,5,5);
c.gridy = 0;
sideBar.add(optionBar, c);
c.gridy = 1;
c.ipadx = 70;
sideBar.add(buttonBar, c);
return(sideBar);
解決
のGridBagLayoutは、残りの空白を残して、コンポーネントが必要とする十分な垂直方向のスペースを割り当てます。私はあなたのサイドバーコンポーネントは垂直方向に中央揃え見ている期待する?
コンポーネントを「プッシュ」するためには、垂直方向の重みを設定する必要があります。あなたがあなたの最後のコンポーネントで1.0にweighty
制約を設定する場合は、そのコンポーネントのすべての残りの垂直方向のスペースを取るし、トップに、残りをプッシュします。 (あなたはまた、GridBagConstraints.NORTH
するその最後のパネルを固定する必要があるかもしれません)。
c.weighty = 1.0
前sideBar.add(buttonBar, c);
を試してみてください。
他のヒント
は、 table2gridbag を使用することができます。これは、レイアウト記述(HTMLテーブル)を取り、GridBagLayoutのマネージャを設定するための同等のレイアウト記述の中にいることを翻訳する小さなコンソールツールです。
私が持っているコードは、それらを配置します 途中でサイドバーダウンの代わりに トップます。
さてあなたは Swingのチュートリアル適切にレイアウトマネージャを使用する方法を学習します。 BoxLayoutは、あなたが制約を指定する方法を学習する必要がないため、GridBagLayoutのよりもはるかに簡単です。あなたはGridBagLayoutのを使用したい場合はしかし、その後、「使用方法のGridBagLayout」の項をお読みください。あなたは「weightxにと重い」制約を扱うセクションに集中することができます。私の限られた知識に基づいて問題を解決するのに役立つべきである。
また、レイアウトマネージャを使用するときは、setBounds()またはのsetSizeを(使用しない)。