Java Komponenten innerhalb JSCrollPane untereinander anordnen?
Hallo Community :)
Mir bereitet folgendes Problem Kopfschmerzen: Ich will dynamisch (also zur Laufzeit) Komponenten untereinander anordnen, also per Knopfdruck immer ein Neues Label erzeugen und daneben ein Textfeld oder eine Kombobox oder irgendsowas. Da das Fenster aber nicht unbegrenzt groß ist würde ich das gerne in ein JScrollPane stecken. Ich dachte es funktioniert vielleicht mit einem GridBagLayout, sodass ich die Komponenten in einem schönen Abstand voneinander im ScrollPane platzieren kann aber ich weiß nicht mal wie ich DAS machen soll. Kann mir da jemand weiterhelfen?
Danke im Voraus :D
2 Antworten
Ein sehr simples, fixes Beispiel:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class ScrollDemo extends JFrame {
private JPanel contentPanel;
private int counter = 0;
public ScrollDemo() {
setDefaultCloseOperation(EXIT_ON_CLOSE);
setSize(300, 200);
setLayout(new GridLayout(2, 1));
init();
setVisible(true);
}
public void init() {
contentPanel = new JPanel();
contentPanel.setSize(600, 400);
contentPanel.setLayout(new FlowLayout());
JScrollPane scrollpane = new JScrollPane(contentPanel);
getContentPane().add(scrollpane);
JButton button = new JButton("add");
button.addActionListener(e -> {
contentPanel.add(new JLabel("hello " + ++counter));
contentPanel.revalidate();
contentPanel.repaint();
});
getContentPane().add(button);
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
new ScrollDemo();
}
});
}
}
Via ActionListener werden dem Panel, welches durch das ScrollPane erweitert wird, neue Elemente zugefügt. Danach wird eine Revalidierung des Elements angefordert und das Neuzeichnen der Komponente veranlasst.
Einfach einen passenden Container mit einem gewünschten LayoutManager ausstatten, diesen in die ScrollPane packen und, sofern erwünscht, auf bestimmte Ereignisse horchen und dann ggf. den Inhalt neu ausrichten. :)