2012-04-27 4 views
12

サイズと定義された位置のJPanelが必要です。 JPanelの内部には、一定数の要素(ボタン)が水平に挿入されています。私のJPanelは定義された幅を持っているので、たくさんのボタンを追加すると、私はそれを見ることができませんでした。この場合、私はこのJPanelのスクロールバーが必要です。しかし、このJPanelは、JFrame内の特定の位置にある一定のサイズでなければなりません。 JPanelのスクロールバーは、その下に水平に配置されています。誰かが私を助けることができますか?私は成功せずにそれを試してみました!JPanelのスクロール

+0

AFAIK、あなたの 'JPanel'には' Defined Width/Height/Size'が1つありますので、一度追加すると大きさを超えたものは ' 'JScrollPane'でも' JPanel'のサイズを越えることはできないので、これらのコンポーネントは常に隠されています:(サイズを定義しないと、コンポーネントは最初に 'JPanel'に追加されます。 'preferredSize()'は 'doLayout()'で暗黙的に決定されますので、 'JScrollPane'はここでは動作しません。 –

+1

[' JToolBar'](http://docs.oracle .com/javase/tutorial/uiswing/components/toolbar.html)または[適切なレイアウト](http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html)を参照してください。[sscce] (http://sscce.org/)の意味を明確にする_確かなsize_と_確かなposition_、この質問は現在の形で答えることはできません。 – trashgod

答えて

17

JScrollPaneを使用し、preferredSizeを指定されたサイズに強制します(または、scrollPaneコンテナLayoutManagerをnullに設定し、スクロールペインでsetBounds()を呼び出します)。また、スクロールバーのポリシーを設定します。ここではその小さなサンプルです:ここでは

import java.awt.Dimension; 

import javax.swing.JButton; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.JScrollPane; 

public class Test { 

    public static void main(String... args) { 
     JFrame frame = new JFrame(); 
     JPanel panel = new JPanel(); 
     for (int i = 0; i < 10; i++) { 
      panel.add(new JButton("Hello-" + i)); 
     } 
     JScrollPane scrollPane = new JScrollPane(panel); 
     scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); 
     scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_NEVER); 
     scrollPane.setBounds(50, 30, 300, 50); 
     JPanel contentPane = new JPanel(null); 
     contentPane.setPreferredSize(new Dimension(500, 400)); 
     contentPane.add(scrollPane); 
     frame.setContentPane(contentPane); 
     frame.pack(); 
     frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 
     frame.setVisible(true); 
    } 
} 
+0

Emm、問題は私がJFrameの特定の位置にJPanelを配置する必要があることです。さらに、それは明確なサイズを持っていなければなりません。 – Chu

+0

@BrallanAttilar LayoutManagerを使用してコンポーネントの位置とサイズを設定するか、LayoutManagerをnullに設定し、setBounds()を呼び出してコンポーネントの位置とサイズを設定します。この場合、JScrollPaneでこれを行う必要があります –

+0

例を教えてもらえますか? – Chu

5

すべてのボタンをパネルに追加します。次に、このパネルをスクロールペインに追加します。

panel.add(button1); 
panel.add(button2); 
panel.add(button3); 
. 
. 
. 
panel.add(buttonn); 

パネルにボタンを追加したら、スクロールパネルにパネルを追加します。

JScrollPane panelPane = new JScrollPane(panel); 

このパネルをフレームに追加します。

+0

申し訳ありませんが、私はJPanelの一部分が明確なサイズと位置にある必要があります。また、スクロールバーの方向:) – Chu

+0

英語でごめん、少し貧しい.. '確定 'を意味する? –

+0

"specific" jeje:D – Chu

4

は、いくつかの可能なソリューションです:

または

  • が決定PointまたはRectangleにスクロールしますメソッドが存在するscrollRectToVisibleなど。 myPanel.scrollRectToVisible(myButton.getBounds());
関連する問題