JPanel im FlowLayout: zeigt JScrollPane nicht an

Sacrent

Grünschnabel
Hallo,

in einem anderen Thread hatte ich zuvor versucht einen "Fehler" herauszufinden, der wahrscheinlich keiner ist, jedoch habe ich mich dann umentschieden statt einem JTable mit TableCellRenderer, der meine Download-Panels darstellen sollte, jetzt einfach ein JPanel zu benutzen, dass per Events mit den Download-Panels befüllt bzw. geleert wird.

Mein neues Problem:
Klicke ich auf den Test-Button werden wunderbar die Download-Panels eingefügt. Nur wenn des Platzes wegen eine Scrollbar erscheinen sollte tut sie das nicht. Ich habe schon viel rumgesucht und anscheinend scheint das FlowLayout ein Problem mit Scrollbars zu haben.

Nun meine Frage:
Ist es möglich eine vertikale Scrollbar bei einem JPanel mit FlowLayout, das dynamisch mit JPanels befüllt wird, wenn nötig anzeigen zu lassen? Wenn ja, ist es aufwändig? Wenn nicht möglich oder aufwändig, gibt es eine Alternative? Ich brauche ein JPanel mit vertikaler Scrollbar, das bei Hinzufügen gleichgroßer JPanels diese untereinander darstellt. (Bis jetzt hat von allen Layouts nur FlowLayout das bewirkt.) Oder ist mein neuer Ansatz keine gute Idee und es gibt eine bessere Variante meine Download-Panels in einer Liste anzeigen zu lassen? Eine JList ist laut verschiedener Quellen nicht geeignet, ein JTable wäre besser. Nur ist dieser Weg sehr umständlich und zweckentfremdend.

Nur so nebenbei noch eine kleine Frage:
In meinem Programm erzeuge ich per Knopfdruck ein Panel mit 2 JProgressbBars progress1 und progress2 und habe ein JLabel footer. Wie kann ich diese später ansprechen bzw. deren Wert/Inhalt ändern variablentechnisch?

Hier der Code:
Code:
package classes;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import javax.swing.BoxLayout;
import javax.swing.BorderFactory;
import javax.swing.JProgressBar;
import javax.swing.JLabel;
import java.awt.FlowLayout;
import javax.swing.JScrollPane;
import java.awt.Color;
import javax.swing.SpringLayout;

public class FMJobsPanel extends JPanel implements ActionListener 
{
  public JPanel listPanel;

  public FMJobsPanel()
  {
    super(new BorderLayout(1, 1));
    
    listPanel = new JPanel();
    listPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 0, 1));
    listPanel.setPreferredSize(new Dimension(789, 445)); // 789, 472
    listPanel.setBackground(Color.white);
    
    JScrollPane scrollPane = new JScrollPane(listPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    scrollPane.setViewportView(listPanel);
    add(scrollPane, BorderLayout.CENTER);
    
    JButton testButton = new JButton("Test");
    testButton.setActionCommand("test");
    testButton.addActionListener(this);
    
    JPanel panel = new JPanel(new GridLayout(0, 1));
    panel.add(testButton);
  
    add(panel, BorderLayout.SOUTH);
    add(listPanel, BorderLayout.NORTH);
    
  }
  
  public void actionPerformed(ActionEvent e) 
  {
    String command = e.getActionCommand();
    
    if (command.equals("test")) 
    {
    
      GridLayout grid = new GridLayout(4, 1);
      JPanel downloadPanel = new JPanel(grid);
      downloadPanel.setBorder(BorderFactory.createEmptyBorder(2, 5, 2, 5));
      
      JLabel header = new JLabel("<html>Download</html>");
      JLabel footer = new JLabel("<html><table><tr><td>Datei 2/5</td><td>Dateiname.txt</td></tr></table></html>");
      JProgressBar progress1 = new JProgressBar();
      JProgressBar progress2 = new JProgressBar();
      progress1.setValue(44);
      progress1.setStringPainted(true);
      progress2.setValue(16);
      progress2.setStringPainted(true);
      
      downloadPanel.add(header);
      downloadPanel.add(progress1);
      downloadPanel.add(progress2);
      downloadPanel.add(footer);
      
      downloadPanel.setPreferredSize(new Dimension(793, 70));
      
      listPanel.add(downloadPanel);
      listPanel.revalidate();

    } 
  }
}
 

Neue Beiträge

Zurück