vendredi 22 mai 2015

JScrollPane scrollt nicht !!

Hallo Liebe Forum Mitglieder,

ich programmiere momentan ein Programm und stehe vor einem kleinem Problem, kurz gesagt:
in ein JPanel welcher auf dem JFrame liegt, wird eine JScrollbar gepackt, hierrein wird nun wieder ein JPanel gepackt in welches ich ebenfalls noch weitere Objekte hinzufügen möchte.

Zur Veranschaulichung:
JPanel direkt auf Frame:
Java Code:

  1.  
  2. public class LowerPanel extends JPanel{
  3. double prozentHoeheFrame = 0.3;
  4. LowerScrollPane lsp = new LowerScrollPane();
  5.  
  6. public LowerPanel(){
  7. super();
  8. this.setLayout(new BorderLayout());
  9. init();
  10. }
  11.  
  12. public void init(){
  13. this.add(lsp, BorderLayout.CENTER);
  14. }
  15.  
  16. public void aktuallisiere(JFrame frame){
  17.  
  18. int xH = 0;
  19. int yH = (int)(frame.getHeight()*(1-prozentHoeheFrame));
  20. int widthH = frame.getWidth()-15;
  21. int heightH = frame.getHeight()-yH-35;
  22.  
  23. //this.setBounds(0, (int)(frame.getHeight()*(1-prozentHoeheFrame)), frame.getWidth()-15, (int)(frame.getHeight()*(prozentHoeheFrame-0.02)));
  24. this.setBounds(xH,yH,widthH, heightH);
  25.  
  26. lsp.aktuallisiere(this);
  27. this.revalidate();
  28. }
  29. }

behinhaltet diese JScrollbar:
Java Code:

  1.  
  2. public class LowerScrollPane extends JScrollPane{
  3.  
  4. ChannelListPanel clp = new ChannelListPanel();
  5.  
  6.  
  7.  
  8.  
  9. public LowerScrollPane() {
  10.  
  11. this.setViewportView(clp);
  12. }
  13.  
  14.  
  15.  
  16.  
  17. public void aktuallisiere(JPanel p){
  18. this.setBounds(0, 0, p.getWidth(), p.getHeight());
  19. this.revalidate();
  20.  
  21. clp.aktuallisiere(p);
  22. //this.setBackground(Color.BLUE);
  23. }
  24. }


welches diesen Container behinhaltet:
Java Code:

  1.  
  2. public class ChannelListPanel extends JPanel{
  3.  
  4. Color farbe = new Color(10,19,200,120);
  5. ArrayList<Channel> channelPanel = new ArrayList();
  6.  
  7. public ChannelListPanel() {
  8. this.setBackground(Color.MAGENTA);
  9. this.setLayout(null);
  10.  
  11.  
  12. for(int i = 0; i < 20; i++){
  13. channelPanel.add(new Channel());
  14. this.add(channelPanel.get(i));
  15. }
  16.  
  17. }
  18.  
  19. public void aktuallisiere(JPanel p){
  20. //this.setBounds(0, 0, 300, 300);
  21. this.setBackground(farbe);
  22. this.setOpaque(true);
  23.  
  24. for(int i = 0; i < channelPanel.size(); i++){
  25. channelPanel.get(i).aktuallisiere(this, i);
  26. }
  27.  
  28. this.revalidate();
  29.  
  30.  
  31.  
  32. }
  33.  
  34. }

um schließlich dieses Panel zu zeigen:
Java Code:

  1.  
  2. public class Channel extends JPanel {
  3.  
  4. public double margin = 0.12;
  5.  
  6.  
  7. public Channel(){
  8.  
  9. }
  10.  
  11. public void aktuallisiere(JPanel p, int number) {
  12. int marginH = (int)(p.getHeight()*margin);
  13. int channelH = (int)(p.getHeight()-marginH*2);
  14.  
  15.  
  16.  
  17. this.setBounds(channelH*number+marginH*(number+1), marginH, channelH, channelH);
  18. this.setBackground(Color.yellow);
  19. this.revalidate();
  20. }


Ich weiß das ist nicht gerade der leichteste Weg dies zu vollbringen aber meine Idee war die:
Ich möchte eine beliebige Anzahl von Kästen nebeneinander angezeigt haben (Channel), wenn der Platz nicht ausreicht, kann man Scrollen.
Theoretisch müsste doch, wenn man mehr Channel hinzufügt, sich die Größe von ChannelListPanel auch vergrößern und somit eine Scrollbar erzeugen ? Bitte klärt mich auf!!! :)

mit freundlichen Grüßen,

Luecx


JScrollPane scrollt nicht !!

0 commentaires:

Enregistrer un commentaire