2009-08-04 17 views
5

私は3つのJLabelと3つのJTextAreaを持っています。私はそれらを中心にborderlayoutに持っていますが、私は別の行にそれぞれが欲しいと思います。それは起こっていません。そして、Googleの改行javaのトップ10の検索結果は問題を解決しません。シンプルな改行はどうすればできますか?<br>? n? Javaの改行

+0

あなたはあなたのJPanelにあなたのコンポーネントを追加する方法を示していますができますか? – akf

+0

mainPanel.add(aLabel); mainPanel.add(aScroller); mainPanel.add(bLabel); mainPanel.add(bScroller); mainPanel.add(cLabel); mainPanel.add(cScroller); –

+0

これは次のように機能しました: mainPanel.setLayout(new BoxLayout(mainPanel、BoxLayout.PAGE_AXIS)); –

答えて

7

これがSwingアプリケーションの場合は、layout managerを使用してフィールドをコンテナに配置する必要があります。

2

改行はSwingオブジェクトの配置に役立ちません。 JPanelの中​​央にレイアウトを配置する必要があります。つまり、境界線レイアウトの中心は単一のSwingオブジェクトJPanelでなければならず、各ウィジェットをスタックできるスタイルに設定する必要があります。 GridLayout(6,1)がそれを行うかもしれません。

1

は、スタータ用のGridLayoutを使用してみてください:

panel.setLayout(new GridLayout(0,2)); 
// the order of added components is important 
panel.add(labelA); 
panel.add(textAreaA); 
panel.add(labelB); 
panel.add(textAreaB); 
... 

はあまりにもきれいに見えるしませんが、それはあなたが開始されます。

LayoutManagerを新しいパネルに設定しないと、HTMLレイアウトのように動作するFlowLayoutが使用されます。しかし、FlowLayoutに意図された改行はありません。コンポーネントの後にコンポーネントを置くだけで、空き領域の終わりに達してから新しい行が開始されます。
レイアウトを制御したい場合は、FlowLayoutを使用しないでください。あなたが知って取得したい場合があります

レイアウトマネージャは、次のとおりです。

  • のBorderLayout - 非常に良いあなたがサイズ変更内容をしたい場合
  • のGridLayout - シンプルがnull
  • 幅と高さのグリッドに等しい - あなたが使用することができます絶対位置を取得するために各コンポーネントのsetBounds

さらに3つありますが、これら3つはパネルの95%をレイアウトする必要があります。

2

GridLayoutまたはGridBagLayoutなどのレイアウトマネージャを使用できます。後者はGUIジェネレータによって生成されるコードにのみ推奨されますが、私はそれが私に最も柔軟性を与えるので、それを好むものです。

JPanel panel = new JPanel(); 
GridBagLayout layout = new GridBagLayout(); 
panel.setLayout(layout); 
layout.add(label1, new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area1, new GridBagConstraints(1, 0, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(label2, new GridBagConstraints(0, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area2, new GridBagConstraints(1, 1, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(label3, new GridBagConstraints(0, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
layout.add(area3, new GridBagConstraints(1, 2, 1, 1, 1, 1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0, 0, 0, 0), 0, 0)); 
panel.add(label1); 
panel.add(label2); 
panel.add(label3); 
panel.add(area1); 
panel.add(area2); 
panel.add(area3); 

もちろん、これは突然醜いように見えますが、始めるべきです。

またBorderLayoutを乱用することができます

JPanel panel = new JPanel(new BorderLayout()); 
JPanel topRow = new JPanel(); 
panel.add(topRow, BorderLayout.PAGE_START); 
topRow.add(label1); 
topRow.add(area1); 
JPanel middleRowBox = new JPanel(new BorderLayout()); 
panel.add(middleRowBox, BorderLayout.CENTER); 
JPanel middleRow = new JPanel(); 
middleRowBox.add(middleRow, BorderLayout.PAGE_START); 
middleRow.add(label2); 
middleRow.add(area2); 
JPanel bottomRowBox = new JPanel(); 
middleRowBox.add(bottomRowBox, BorderLayout.CENTER); 
JPanel bottomRow = new JPanel(); 
bottomRowBox.add(bottomRow, BorderLayout.PAGE_START); 
bottomRow.add(label3); 
bottomRow.add(area3); 
bottomRowBix.add(new JPanel(), BorderLayout.CENTER); 
+1

多くのUIコンポーネントを構築した後、私はもうGridBagLayoutだけを使用しています。もう少し作業はありますが、ビューが適切に拡大することを保証することができます。 – aperkins

+0

多くのUIコンポーネントを構築した後、GridBagLayoutを使用しなくなりました。これは素晴らしいセルスケーリングとアライメントオプションを提供しますが、単純なLayoutManagerを使用したパネルではできないことは何もありません。 。あなたが何か間違ったことをすると、一時間を過ごすことができます。 – Stroboskop

関連する問題