JPanel mit Border, Scrollpane und Checkboxen

@Xan: Yeep ;-]

@Saban:
Aha, schönes Bild .... :suspekt:

Und wie soll das Ergebnis konkret aussehen? ? ?
Sind das drei untereinander liegende Bereiche, in denen jeweils gescrollt werden soll? Oder doch eher über den Gesamtbereich?:confused:
Und Deine vielen Hallo's sind dann der zu scrollende Inhalt? ? ?

Ein paar mehr Infos wären schon schön, da meine Kristallkugel leider gerade zur Reparatur ist :D

Gruß
Klaus
 
Hallo,

erstmal noch grundlegende Fehler beseitigen.
Diese Zeile ist nicht ganz korrekt.
Code:
scrollPane.add(this);

Damit das JPanel richtig in der ScrollPane liegt, muss es so heißen.
Code:
scrollPane.getViewport().add(this);

Was noch nicht korrekt ist, wurde hier schon erwähnt. Du fügst zwar das JPanel der Scrollpane hinzu, aber die Scrollpane nicht dem Fenster. Deshalb wird bei dir das JPanel trotzdem angezeigt, obwohl das Panel falsch der Scrollpane hinzugefügt wird.
Hättest du die Scrollpane dem Fenster hinzugefügt, wäre dir schon aufgefallen, dass was nicht stimmen kann.

Wenn du das alles korrigiert hast, funktioniert es aber immer noch nicht.
Das liegt daran, dass du das Layout des Panels auf null setzt. Damit wird das Panel nicht mehr von einem LayoutManager verwaltet. Das ist so eigentlich nicht schlimm, aber das heißt, dass du auch die Größe des Panels ändern musst, wenn du was hinzufügst, was nicht mehr im sichtbaren Bereich ist. Sonst behält das Panel immer die gleiche Größe und die Scrollpane wird nicht angezeigt.

MFG

Sascha
 
Hallo Zusammen!

Mein aktueller Code schaut jetzt so aus!

Java:
		JScrollPane scroll = new JScrollPane();
		scroll.setBounds( 10,  5, 200, 150);
		scroll.getViewport().add(pa_Kostenstelle);
		scroll.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Kostenstelle"));
		aktuelleGUI.add(scroll);

Jetzt wird mir alles schön angezeigt! Nur wie Sascha Schirra schon sagte wird mir keine Scrollpane angezeigt Obwohl ich die größe von meinem Panel auf 1000 / 1000 gesetzt habe :confused:

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Hi!

Also meine JFrame:

Java:
import java.awt.Container;
import java.awt.Dimension;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.sql.SQLException;

import javax.swing.AbstractAction;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JScrollPane;

public class BK_Frame extends JFrame{
	
	/**
     * Konstruktor
	 * @throws SQLException 
     */
	public BK_Frame() throws SQLException{
		/* Setzt den Titel des Frames */
		setTitle("BauKom");
		
		/* Setzt die Größe des Frames */
		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
		int hoehe = (int) d.getHeight();
		int weite = (int) d.getWidth();
		
		/* Hoehe minus 30 das die Start-Leiste nicht überdeckt wird */
		setSize(weite, hoehe -30);
		
		/* Setzt die Eigenschaft zum größer ziehen des Fensters */
		setResizable(false);
		
		/* Objekt der Klasse Layout */
		BK_Panel pa_Kostenstelle 	= new BK_Panel("Kostenstelle");
		BK_Panel pa_Werknummer 		= new BK_Panel("Werknummer");
		BK_Panel pa_Mehrzeitgründe 	= new BK_Panel("MZG und andere Tätigkeiten");
		
		/* Container des Frames für die einzelnen GUI Elemente */
		Container aktuelleGUI = getContentPane();
		
		/* Layout des Frames */
		aktuelleGUI.setLayout(null);
		
		/* Positionieren der Elemente */
		pa_Werknummer.		setBounds( 10,165, 200, 150);
		pa_Mehrzeitgründe.	setBounds( 10,325, 200, 150);
		
		/* Menüleiste des Frames */
		JMenuBar menuBar = new JMenuBar();
		setJMenuBar(menuBar);
		JMenu datei = new JMenu("Datei");
		menuBar.add(datei);
		
		
		JScrollPane scroll = new JScrollPane();
		scroll.setBounds( 10,  5, 200, 150);
		scroll.getViewport().add(pa_Kostenstelle);
		scroll.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Kostenstelle"));
		aktuelleGUI.add(scroll);
		
		/* Hinzufügen der Elemente an den Container */

		aktuelleGUI.add(pa_Mehrzeitgründe);
		aktuelleGUI.add(pa_Werknummer);
		
		/* Beende das Programm wenn das Fenster geschlossen wird */
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		/* Sichtbarkeit des Fensters */
		setVisible(true);
	}
}

Meine Panel Klasse die jetzt nur die JLabels beinhaltet:
Java:
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{
	
	/**
     * Konstruktor
     */
	public BK_Panel(String titel){		
		JLabel label[] = new JLabel[15];
		setSize(1000, 1000);
		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]);			
	}	
}

Ich hoffe ich hab jetzt nichts dummes übersehen :eek:

MfG
Saban
 
Zuletzt bearbeitet von einem Moderator:
Es liegt daran, dass du die Größe mit setSize() setzt. setSize wird nur benutzt, wenn du dort wo die Komponente hinzufügst, kein LayoutManager verwendest.

Sonst muss man immer setPreferredSize() verwenden.

MFG

Sascha
 
Hallo!

Vielen vielen Dank euch allen für eure Unterstützung endlich hab ich des Problem beseitigt :) :) :)

MfG
Saban
 
Hallo Zusammen!

ich hätte jetzt doch noch eine Frage :-) und zwar erzeuge ich mein Panel mit Scrollpane folgendermaßen

mein Panel
Java:
public class BK_Panel extends JPanel{
	
	public BK_Panel(){
		/* new GridLayout (Anzahl an Spalten, Anzahl an Zeilen) */
		setLayout(new GridLayout (0, 1));
	}
	
	public Component add(Component c){
		super.add(c);
		validate();
		return c;
	}			
}

und hier der Code zu meinem Frame in dem des Scrollpane hinzugefügt wird
Java:
...
		BK_Panel pa_Kostenstelle = new BK_Panel();
		
		/* Container des Frames für die einzelnen GUI Elemente */
		Container aktuelleGUI = getContentPane();
		
		/* Layout des Containers */
		aktuelleGUI.setLayout(null);
				
		JScrollPane scroll = new JScrollPane();
		scroll.setBounds( 10,  5, 200, 100);
		scroll.getViewport().add(pa_Kostenstelle);
		scroll.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(), "Kostenstelle"));
		aktuelleGUI.add(scroll);
...

Das klappt ja nun dank eurer Hilfe wunderbar! :) ich würde jedoch gern wissen ob ich des alles auch in der Panel Klasse unterbringen kann, da ich sonst 5 mal den selben Code tippen müsste weil ich jedes Panel mit einer Scrollpane versehen will.

Danke im Voraus

MfG
Saban
 

Anhänge

  • Unbenannt.jpg
    Unbenannt.jpg
    3,7 KB · Aufrufe: 28
Zuletzt bearbeitet von einem Moderator:
Zurück