Saban Geschrieben 3. Februar 2009 Geschrieben 3. Februar 2009 Hallo Zusammen! ich muss für die Arbeit ein Layout zusammen bauen welches ein JPanel auf einem Frame enthält. In das Frame kommen eine unbekannte Anzahl an Checkboxen, d. h. falls die angezeigte Fläche auf dem Frame nicht ausreicht soll ein Scrollpane erscheinen das die Checkboxen angezeigt werden können die außerhalb des Panels liegen. Ich weiß nicht ob ich mein Problem erklären konnte. Das Panel wird auf dem Frame mit einer größe von 200, 200 angezeit. Falls nun 10 Checkboxen angezeigt werden sollen geht das nicht da die Fläche auf dem Frame zu klein ist dann soll auf dem Panel eine Scrollpane erscheinen mit der man hoch und runter scrollen kann. Das ist bis jetzt mein Ansatz: import java.awt.BorderLayout; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; public class BK_Panel extends JPanel{ /** * Konstruktor */ public BK_Panel(String titel){ setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), titel)); } } MfG Saban Zitieren
flashpixx Geschrieben 3. Februar 2009 Geschrieben 3. Februar 2009 Und wo ist das Problem? Ich lese hier nur, dass Du diese Aufgabestellung erfüllen sollst und einen Ansatz postest, der nicht viel enthält. Phil P.S.: Du wirst hier sicher keinen fertigen Code bekommen Zitieren
Saban Geschrieben 3. Februar 2009 Autor Geschrieben 3. Februar 2009 Ich muss aus ner Datenbank auslesen welche Strings es als Checkboxen geben soll und anschließend diese als Checkboxen initialiseren. Checkboxen erstellen ist kein Problem an sich. Ich würde nur gern wissen wie man ein Panel mit nem Scrollpane anlegt. Und wenn ich wüsste wie des geht dann würde ich den Post ja net brauchen und so weit bin ich bis jetzt noch nicht gekommen... Scrollpane scrollpane = new Scrollpane(this); wäre mein Ansatz gewesen MfG Saban Zitieren
flashpixx Geschrieben 3. Februar 2009 Geschrieben 3. Februar 2009 Du fügst die Checkboxes via add-Methode dem Pane hinzu und das Pane an Dein Frame Phil Zitieren
Saban Geschrieben 3. Februar 2009 Autor Geschrieben 3. Februar 2009 Hi! Danke aber das weiß ich schon. Das einzige problem ist das mir kein scrollpane angezeigt wird. Ich lasse 14 JLabels auf das Panel legen. Und füge dann alles zusammen so wie du es gesagt hast. Das Problem ist mir werden nur 10 von 14 labels angezeigt und es erscheint keine Scrollpane :confused: MfG Saban Zitieren
Dragon8 Geschrieben 4. Februar 2009 Geschrieben 4. Februar 2009 Ihr beiden redet ja auch super aneinander vorbei... Also, die Sache ist ganz einfach. Zu allererst solltest anstatt ScrollPane lieber die Klasse JScrollPane benutzen, da diese genauso wie JPanel aus dem swing Packet stammt. Und dann erzeugst du dir einfach ein JScrollPane und übergibst im Konstruktor dein JPanel, auf dem deine ganzen Checkboxen liegen, diesem JScrollPane. Danach musste das JScrollPane deinem JFrame oder sonst was einfach nur noch hinzufügen (nicht das JPanel!) und schon bekommste bei zu vielen Komponenten auf dem JPanel einen Scrollbalken. Zitieren
Wayne Geschrieben 4. Februar 2009 Geschrieben 4. Februar 2009 Du kannst auch alternativ die Methode setViewportView(Component) bzw. setViewPort(JViewPort) aufrufen. Und Überraschung: All das und noch viel mehr steht wo? Genau! In der Java API Doku: JScrollPane Zitieren
Saban Geschrieben 4. Februar 2009 Autor Geschrieben 4. Februar 2009 Hallo! Also ich habs jetzt mal so ausprobiert aber da wird kein Scrollpane angezeigt... :confused: import java.awt.BorderLayout; import java.awt.Dimension; import java.sql.SQLException; import javax.swing.BorderFactory; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; public class BK_Panel extends JPanel{ private JScrollPane scrollPane = new JScrollPane(); /** * Konstruktor */ public BK_Panel(String titel){ setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), titel)); JLabel label[] = new JLabel[15]; setLayout(null); label[0] = new JLabel("Hallo"); label[0].setBounds(10, 10, 80, 20); add(label[0]); label[1] = new JLabel("Hallo"); label[1].setBounds(10, 35, 80, 20); add(label[1]); label[2] = new JLabel("Hallo"); label[2].setBounds(10, 60, 80, 20); add(label[2]); label[3] = new JLabel("Hallo"); label[3].setBounds(10, 85, 80, 20); add(label[3]); label[4] = new JLabel("Hallo"); label[4].setBounds(10, 85, 80, 20); add(label[4]); label[5] = new JLabel("Hallo"); label[5].setBounds(10,110, 80, 20); add(label[5]); label[6] = new JLabel("Hallo"); label[6].setBounds(10,135, 80, 20); add(label[6]); label[7] = new JLabel("Hallo"); label[7].setBounds(10,160, 80, 20); add(label[7]); label[8] = new JLabel("Hallo"); label[8].setBounds(10,185, 80, 20); add(label[8]); label[9] = new JLabel("Hallo"); label[9].setBounds(10,210, 80, 20); add(label[9]); label[10] = new JLabel("Hallo"); label[10].setBounds(10,235, 80, 20); add(label[10]); scrollPane.add(this); scrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED); scrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrollPane.setPreferredSize(new Dimension(320, 240)); } } MfG Saban Zitieren
Dragon8 Geschrieben 4. Februar 2009 Geschrieben 4. Februar 2009 Und wo oder wie fügst du das deinem JFrame hinzu? Zitieren
Saban Geschrieben 4. Februar 2009 Autor Geschrieben 4. Februar 2009 Das mach ich so: BK_Panel pa_Kostenstelle = new BK_Panel("Kostenstelle"); pa_Kostenstelle.setBounds( 10, 5, 200, 150); aktuelleGUI.add(pa_Kostenstelle); MfG Saban Zitieren
elSusto Geschrieben 4. Februar 2009 Geschrieben 4. Februar 2009 hier fügst du aber das JPanel zum JFrame hinzu, wenn ich das richtig verstanden habe, solltest du aber die JScrollPane zum JFrame hinzufügen. Und dann erzeugst du dir einfach ein JScrollPane und übergibst im Konstruktor dein JPanel, auf dem deine ganzen Checkboxen liegen, diesem JScrollPane. Danach musste das JScrollPane deinem JFrame oder sonst was einfach nur noch hinzufügen (nicht das JPanel!) und schon bekommste bei zu vielen Komponenten auf dem JPanel einen Scrollbalken. deswegen funktioniert es wahrscheinlich auch nicht;) Zitieren
Dragon8 Geschrieben 4. Februar 2009 Geschrieben 4. Februar 2009 hier fügst du aber das JPanel zum JFrame hinzu, wenn ich das richtig verstanden habe, solltest du aber die JScrollPane zum JFrame hinzufügen. [Mein Zitat] deswegen funktioniert es wahrscheinlich auch nicht;) Danke, wenigstens einer der es gelesen hat Zitieren
elSusto Geschrieben 4. Februar 2009 Geschrieben 4. Februar 2009 hatte gerade langeweile und da ich mich mit swing eigentlich nicht auskenne hab ich es mal versucht ;-) import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JScrollPane; public class ScrollPaneTest { private JFrame f; private JScrollPane scroll; private JPanel panel; private JLabel lbl0; private JLabel lbl1; private JLabel lbl2; private JLabel lbl3; private JLabel lbl4; private JLabel lbl5; private JLabel lbl6; private JLabel lbl7; private JLabel lbl8; private JLabel lbl9; public ScrollPaneTest() { f = new JFrame(); panel = new JPanel(); lbl0 = new JLabel("hallo0"); lbl1 = new JLabel("hallo1"); lbl2 = new JLabel("hallo2"); lbl3 = new JLabel("hallo3"); lbl4 = new JLabel("hallo4"); lbl5 = new JLabel("hallo5"); lbl6 = new JLabel("hallo6"); lbl7 = new JLabel("hallo7"); lbl8 = new JLabel("hallo8"); lbl9 = new JLabel("hallo9"); panel.add(lbl0); panel.add(lbl1); panel.add(lbl2); panel.add(lbl3); panel.add(lbl4); panel.add(lbl5); panel.add(lbl6); panel.add(lbl7); panel.add(lbl8); panel.add(lbl9); scroll = new JScrollPane(panel); f.add(scroll); f.setVisible(true); f.setSize(100,100); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } public static void main(String[] args) { ScrollPaneTest test = new ScrollPaneTest(); } } funktioniert einwandfrei =) Zitieren
Saban Geschrieben 4. Februar 2009 Autor Geschrieben 4. Februar 2009 Achso :upps Ähm eine Frage hätte ich dann noch meine klasse beinhaltet ja ein JPanel und im Konstruktor füge ich dieses Panel einem ScrollPane hinzu. Nur wie übergebe ich das ScrollPane später dem Frame. Wenn ich ein Objekt erzeuge bleibt es ja ein Panel oder :confused: Ich komm da nicht ganz mit... MfG Saban Zitieren
Dragon8 Geschrieben 4. Februar 2009 Geschrieben 4. Februar 2009 Zum Beispiel in dem du in deiner Klasse einfach nur das JPanel erzeugst und das JScrollPane einfach erstmal weg lässt. Das JPanel muss dem JScrollPane nicht von anfang an hinzugefügt worden sein, das geht auch am Ende. Und dann schreibste dir in deiner eigenen JPanel-Klasse einfach eine Methode die eine JScrollPane, die dein JPanel beinhaltet, zurück gibt. Beispiel: public class BK_Panel extends JPanel{ [...] public JScrollPane getPanelWithScrollPane() { return new JScrollPane(this); } [...] } Zitieren
elSusto Geschrieben 4. Februar 2009 Geschrieben 4. Februar 2009 alternativ vorschlag: public class BK_Panel extends JScrollPane{ //.... } dann bräuchtest du nur die klasse zum Frame hinzufügen wie du es am anfang auch getan hast. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.