[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.jpgwenn 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.jpgjetzt 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