[Swing] Problem mit JPanel und JScrollPane



  • Hallo,

    gleich zu Anfang: entschuldigt wenn der thread zu groß ist, aber ich komm schon seit ner Woche wegen diesem Fehler nicht richtig weiter

    ich schreibe grade ein kleines Kartenspiel, funktioniert soweit auch ganz gut aber ich stoße auf ein Problem mit JScrollPane, hier der Code:

    int size = game.getCardList().size();
    int height = ((size/3)+1)*240;
    int rows = (size-(size%3))/(3)+1;
    
    ContentPane pane2 = new ContentPane(height);
    String[][] card = game.getCards();
    CardFieldPanel[][] Cards = new CardFieldPanel[rows+1][3];
    
    for(int i=0; i<rows; ++i)
    {
      for(int a=0; a<3; ++a)
      {
        if((i)*3+a >= size)
        {
          break;
        }
        else
        {
          Cards[i][a] = new CardFieldPanel(50+a*160, 20+i*220, card[i*3+a][0],
          Integer.parseInt(card[i*3+a][1]), Integer.parseInt(card[i*3+a][2]),
          Integer.parseInt(card[i*3+a][3]), Integer.parseInt(card[i*3+a][4]), true);
    
          pane2.add(Cards[i][a]);
        }
      }
    }
    
    JScrollPane panel = new JScrollPane(pane2,
    JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
    JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
    
    panel.setPreferredSize(new Dimension(700, 760));
    dial.add(panel);
    

    dial ist ein JDialog, CardFieldPanel wurde von JPanel abgeleitet.
    ContentPane ist ebenfalls von JPanel abgeleitet und soll nur die CardFieldPanel aufnehmen.
    Das Problem ist, das der Dialog folgendermaßen aussieht:
    http://img246.imageshack.us/img246/4324/bild1fs8.th.jpg

    wenn ich die Zeilen 26-29 auskommentiere und stattdessen einfach dial.add(pane2) schreibe sieht das halbwegs anständig aus:
    http://img356.imageshack.us/img356/5517/bild2bo1.th.jpg

    jetzt die entscheidende Frage: Was kann ich machen?
    Ich hab von Scrollable gelesen und mir die Java Tutorial dazu angeschaut, aber die waren wenig hilfreich. Ist Scrollable das richtige oder wonach soll ich suchen? oder hatte vllt. jemand schonmal ein ähnliches Problem, das er gelöst hat?

    Auf jeden Fall Vielen Dank für eure Bemühungen

    Gruss

    CrimsonKing



  • Hallo CrimsonKing,

    falls Dir das folgende hilft:

    import java.awt.*;
    import javax.swing.*;
    
    public class TestScrollPane extends JDialog {
    	public TestScrollPane() {
    		setTitle("Test JScollPane");
    		setSize(400, 400);
    		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
    		setVisible(true);
    
                    /* ContentPane nach Container */
    		contentPane = getContentPane();
    		panel = new TestPanel();
    
                    /* In den Container dann die JScrollPane und darin andere 
                       Komponenten */
    		contentPane.add(new JScrollPane(panel));
    	}
    
    	public static void main(String[] args) {
    		new TestScrollPane();
    	}
    
    	private Container contentPane;
    	private TestPanel panel;
    	private JScrollPane scrollPane;
    	private BorderLayout bLayout;
    }
    
    class TestPanel extends JPanel {
    	public TestPanel() {
                    /* Nicht die JScrollPane dimensionieren sondern 
                       hier z. B: das Panel */
    		this.setPreferredSize(new Dimension(400, 900));
    		add("Center", new JLabel("Hallo"));
    	}
    }
    

    Falls die JScrollPane nicht angezeigt wird, einfach mal das Fenster vergrößern
    oder verkleinern.

    Viele Grüße

    Thomas



  • Danke für deine Hilfe thknopp!

    Ich weiss jetzt woran es liegt das ContentPane und das ScrollPane nicht gezeichnet werden, ContentPane hatte ein null-Layout und scheinbar funktioniert ScrollPane nicht mit null-Layout.

    Vielen Dank nochmal


Anmelden zum Antworten