2016-07-18 11 views
0

Ich versuche, eine einfache Swing UI zu erstellen, die eine Liste von Textbereichen alle untereinander anzeigt. Ich möchte eine Bildlaufleiste haben, mit der ich vertikal durch die Liste blättern kann.Java Swing - Elemente in scrollbaren GridLayout nicht sichtbar

Allerdings kann ich nicht die Einträge im Raster sichtbar machen und so bleiben.

Es scheint, als ob die Einträge für einen Bruchteil einer Sekunde erscheinen und dann wieder verschwinden. Ich kann es überhaupt nicht verstehen.

Hier ist mein Code:

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"); 
} 

} 

Jede Hilfe wird sehr geschätzt!

Antwort

2

Sie fügen Ihr JPanel dem JScrollPane hinzu, was Sie nie tun sollten. Sie müssen die View-Port-Ansicht mit Ihrem JPanel festlegen, damit sie zum Viewport von JScrollPane hinzugefügt wird, wie das JScrollPane-Tutorial und die API erklären. Also nicht

scrollpane.add(stretchPanel); 

sondern

scrollpane.setViewportView(stretchPanel); 

Weitere Themen:

  • Warum Ihre eigene JScrollBar erstellen und nicht den Standard eines von JScrollPane bereitgestellt verwenden?
  • Da Sie ein Raster von JTextFields anzeigen, sollten Sie stattdessen eine JTable erstellen und anzeigen.
+0

Danke, es scheint, ich habe sowohl hinzufügen und setviewportview aufgerufen. Durch das Entfernen des Add-Calls wurde mein Problem behoben. Die Bildlaufleiste, die ich nur erstellt habe, um die Bildlaufleiste zu sehen, mit der ich vorher zu kämpfen hatte. –