Javaのグリッドバッグレイアウト:回避中央揃え
-
21-09-2019 - |
質問
私のGUIアプリケーションでは、私は私のプログラムの実行中にさまざまなポイントでインスタンス化されているいくつかのJPanelを持っており、特定のアクションは、そのうちの一つは、スクロールペインに表示されるようになります。
mViewport.setViewportView(currentPanel);
トラブルは、私のパネルは、グリッドバッグレイアウトを使用して行われ、そしてその行動は、それが内部のある側JScrollPane内自体を中央にあること、です。これは、GUIの見た目が奇妙な作ります。
左上整列するグリッドバッグレイアウトパネルを強制する方法の誰もが知っていますか?
ありがとうございます。
<時間>EDIT
なお、ここで私はそのスクロールペイン内ではなく、パネル内のコンポーネントに関するパネル全体のアライメントについて尋ねています。
解決 2
私はいくつかの周りをいじるの後に自分の質問への解決策を見つけます:
は重みを設定するJPanel
を使用したためGridBagLayout
内の構成要素の位置合わせに影響を与えることができるように思われます。しかし、それはJPanel
内JScrollPane
のアライメントに影響を持っていませんでした。
私は、私は私の以前のコードでやっていたとしてのありませんのにあるという簡単な解決策は、直接内部JPanel
のJScrollPane
を入れました
if (currentPanel != mCurrentPanel)
{
mViewport.setViewportView(currentPanel);
}
...しかし、代わりに「外側」JPanel
内部JScrollPane
、およびFlowLayout
を使用することセットを置くこと。それから私は、パネルを切り替えたいとき、私は「外側」パネル内のパネル古いと場所を削除します。
if (currentPanel != mCurrentPanel)
{
if (mCurrentPanel != null)
{
mOuterPanel.remove(mCurrentPanel);
}
mCurrentPanel = currentPanel;
mOuterPanel.add(mCurrentPanel);
}
それは私が唯一の代わりに私が持っていた多くのパネルのそれぞれの1クラスでの効果の変化、にありましたので、このアプローチは、十分ではなく働いています。
他のヒント
あなたは、パネル内部の構成要素のうちの1つ以上に(GridBagConstraints
に)重みを設定する必要があります。これにより、コンポーネントは(ウェイトなしで、部品のみ、彼らが必要なものを取り上げると、パネルは利用可能なスペースの中央に配置されます)利用可能なスペースをより取るために「プッシュ」の効果があります。
、1.0に下のコンポーネントのY体重を設定して、1.0に最も右のコンポーネントのxの重みを設定します。