2016-07-18 18 views
0

テキストエリアのリストをすべて下に表示する簡単なSwing UIを作成しようとしています。 私はリストを縦方向にスクロールできるスクロールバーが必要です。Java swing - スクロール可能なGridLayoutのアイテムが表示されない

しかし、グリッド内のエントリを表示してそのままにすることはできません。

エントリが数秒間表示されてから再び消えるようです。私はそれを全く理解できません。すべてのヘルプは大歓迎です

public class MyWindow extends JFrame { 
JPanel stretchPanel; 
JScrollPane scrollpane; 
JPanel centrePanel; 
JScrollBar scrollbar; 

public MyWindow(String title) { 
    super(title); 
    BorderLayout layout = new BorderLayout(); 
    setLayout(layout); 

    stretchPanel = new JPanel(); 
    scrollpane = new JScrollPane(); 
    stretchPanel.setLayout(new FlowLayout()); 
    centrePanel = new JPanel(); 
    centrePanel.setLayout(new GridLayout(0, 1)); 
    scrollbar = new JScrollBar(JScrollBar.VERTICAL); 
    scrollpane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
    scrollpane.setVerticalScrollBar(scrollbar); 

    scrollpane.setViewportView(stretchPanel); 
    stretchPanel.add(centrePanel); 
    scrollpane.add(stretchPanel); 
    add(scrollpane, BorderLayout.CENTER); 
    fillGrid(); 
    setVisible(true); 
} 

public void fillGrid() { 
    centrePanel.removeAll(); 
    for (int i = 0; i < 20; i++) { 
     TextField entry = new TextField("Hello"); 
     centrePanel.add(entry); 
    } 
    scrollpane.setPreferredSize(new Dimension(800, 700)); 
    pack(); 
} 

public static void main(String[] args) { 
    new MyWindow("d"); 
} 

} 

は、ここに私のコードです!

答えて

2

JPanelをJScrollPaneに追加しています。これは決して行うべきではありません。 JPanelでビューポートビューを設定して、JScrollPaneのチュートリアルとAPIの説明に従ってJScrollPaneのビューポートに追加する必要があります。そうではない

scrollpane.add(stretchPanel); 

ではなく、むしろ

scrollpane.setViewportView(stretchPanel); 

その他の問題:

  • なぜするJScrollPaneが提供するデフォルトの1を使用し、独自するJScrollBarを作成していませんか?
  • JTextFieldのグリッドを表示しているので、代わりにJTableを作成して表示する必要があります。
+0

ありがとう、私はaddとsetviewportviewの両方を呼び出したようです。追加コールを削除すると問題が解決しました。私が以前に苦労していたことをスクロールバーに表示しようと試みたスクロールバー。 –

関連する問題