Hi,
ich habe ein Problem, auf das ich keine Lösung finde und auf euren kompetenten Rat hoffe.
Ich erzeuge hier 20 Panels, die von der Höhe her mehr Platz als das Fenster benötigen.
Deshalb brauche ich eine Scrollbar um alle Panels darzustellen.
Leider will die Scrollpane aber nicht ihre Funktion erfüllen und ich kann nicht sagen warum.
Ich weis auch nicht ob die Scrollpane richtig anwende.
Hier der komplette Sourcecode:
ich habe ein Problem, auf das ich keine Lösung finde und auf euren kompetenten Rat hoffe.
Ich erzeuge hier 20 Panels, die von der Höhe her mehr Platz als das Fenster benötigen.
Deshalb brauche ich eine Scrollbar um alle Panels darzustellen.
Leider will die Scrollpane aber nicht ihre Funktion erfüllen und ich kann nicht sagen warum.
Ich weis auch nicht ob die Scrollpane richtig anwende.
Hier der komplette Sourcecode:
Java:
package pmtest;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class view {
public static void main(String[] args){
//Fenster erzeugen
JFrame frame = new JFrame("Fenster");
frame.setResizable(false);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(800,400));
//layout des frames
frame.setLayout(new GridBagLayout());
GridBagConstraints mainGBC = new GridBagConstraints();
//
JLabel lblFilter = new JLabel("Filter:");
JTextField txtFilter = new JTextField();
//--> Panel in welchem die dynamisch angelegten panels liegen
JPanel mainPanel = new JPanel();
//--> die Scrollpane -> das MAINPANEL wird als ziel angegeben
JScrollPane scroll = new JScrollPane(mainPanel);
scroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
//setze Größe so groß wie die vom mainPanel
scroll.setPreferredSize(new Dimension(25,100));
/* 0 1
* ----------------------------------------
* 0 | lblFilter | + txtFilter +++++++++ |
* |--------------------------------------|
* | ------------------------------- -- |
* | | mainPanel | x |
* 1 | | mit | || |
* | | vielen dynamischen panels | || |
* | ------------------------------- -- |
* ----------------------------------------
*/
//Zusammenbau der Komponenten auf dem Fenster
mainGBC.gridx=0;
mainGBC.gridy=0;
mainGBC.gridwidth=1;
mainGBC.gridheight=1;
frame.add(lblFilter,mainGBC);
mainGBC.gridx=1;
mainGBC.gridy=0;
mainGBC.gridwidth=1;
mainGBC.gridheight=1;
frame.add(txtFilter,mainGBC);
mainPanel.setPreferredSize(new Dimension(200,100));
mainPanel.setBackground(new Color(255,200,200));
//dynamisch die Boxen erzeugen
int anzahlBoxen = 20;
JButton[] btnArray = new JButton[anzahlBoxen];
JPanel[] containerArray = new JPanel[anzahlBoxen];
for(int i=0;i<anzahlBoxen;i++)
{
btnArray[i] = new JButton("OK");
btnArray[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Button gedrückt!");
}
});
containerArray[i] = new JPanel();
containerArray[i].setBackground(new Color(200,255,200));
containerArray[i].setPreferredSize(new Dimension(60,35));
//jedes Panel das als Container dient, eigenes Layout
containerArray[i].setLayout(new GridBagLayout());
GridBagConstraints panelGBC = new GridBagConstraints();
//den Button in den Containerpanel integrieren
panelGBC.gridx=0;
panelGBC.gridy=0;
panelGBC.gridwidth=1;
panelGBC.gridheight=1;
containerArray[i].add(btnArray[i],panelGBC);
//den Containerpanel an das MAINPANEL anfügen
int koord = 1+i;
mainGBC.gridx=0;
mainGBC.gridy=koord;
mainGBC.gridwidth=1;
mainGBC.gridheight=1;
mainPanel.add(containerArray[i], mainGBC);
}
//layoutposition der SCROLLPANE
mainGBC.gridx=1;
mainGBC.gridy=1;
mainGBC.gridwidth=1;
mainGBC.gridheight=1;
frame.add(scroll,mainGBC);
mainGBC.gridx=0;
mainGBC.gridy=1;
mainGBC.gridwidth=1;
mainGBC.gridheight=1;
frame.add(mainPanel,mainGBC);
frame.pack();
frame.setLocation(
(Toolkit.getDefaultToolkit().getScreenSize().width)/2,
(Toolkit.getDefaultToolkit().getScreenSize().height)/2
);
//fenster sichtbar machen
frame.setVisible(true);
}
}
Zuletzt bearbeitet von einem Moderator: