JScrollPane geht nicht

  • Themenstarter Themenstarter ZAntjeZ
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
Z

ZAntjeZ

Gast
Hallo,

hat jemand Ahnung, warum im folgenden Code der Scrollbalken nicht erscheint, wenn er soll????

Code:
JScrollPane jsp;
		
	StructFenster()
	{
		super("Struktogramm Nr." + (++openFrameCount),
						true, //Größe änderbar
						true,//schliessbar
						true,//maximierbar
						true);//minimierbar
					
		setSize(350,350);
		setLocation(xOffset*openFrameCount,yOffset*openFrameCount);		

		mxy=new Point(0,0);
		fensterBreite=this.getWidth();
		fensterHoehe=this.getHeight();
			
		//leinwand.setBorder(BorderFactory.createEtchedBorder());
		leinwand.setBackground(Color.WHITE);
		
		jsp=new JScrollPane(leinwand);
								
		cp.add(jsp,BorderLayout.CENTER);
		statusleiste.setText(" ");
		cp.add(statusleiste,BorderLayout.SOUTH);
		
	}
 
Von welchem Typ ist die Objektreferenz "leinwand"? Ich glaube so lange nicht mindestens eine Component die das Interface Scrollable implementiert der JScrollPane hinzugefügt wurde, zeigt diese auch keine Scrollbalken an.
 
@L-ectron-X
Es sollte schon mit normalen Komponenten funktionieren, solange sie genug gross sind...

@ZAntjeZ
Wie gross ist diese "leinwand"? Das JScrollPane passt die Grösse dem Rückgabewert von "leinwand.getPreferredSize" an.
 
Die Leinwand ist von JPanel abgeleitet.
Eine Größe für die Leinwand habe ich nicht angegeben.

Klasse Leinwand:
Code:
public class Leinwand extends JPanel
{
	StructObject rootObject;
	static StructObject selectedObject;
	Graphics g=this.getGraphics();

	Leinwand()
	{
		// Wurzelobjekt (äußerster Rahmen) erzeugen; Breite und Mindesthöhe angeben
		rootObject = new StructObject(300,60); 

		// Referenz auf momentan ausgewähltes Objekt/Rahmen auf Wurzel-
		// objekt setzen; zu diesem werden neue Elemente hinzugefügt
		selectedObject = rootObject;

		// MouseListener
		addMouseListener(new MouseAdapter()
		{
			public void mouseClicked(MouseEvent e)
			{
				// root-Objekt fragen, welches Objekt angeklickt wurde
				StructObject sel =
					rootObject.getSelectedObject(e.getX(), e.getY());
				// Klick außerhalb aller Objekte ignorieren
				if (sel != null)
				{
					selectedObject = sel;
					AlgFenster.statusleiste.setText("Objekt [" + sel.getID() +
						"] ausgewählt\n");
							
					System.out.println("Auswahl: "+sel.getID());	
							
					Toolbar.btnLabel.setEnabled(true);
					Toolbar.btnAlg.setEnabled(true);
					
				}
				

			}
		});
	}

	
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);

		// Wurzelobjekt und damit alle untergeordneten Objekte
		// zeichnen
		rootObject.paint(g,20,20);
	}
}
 
Okay, der Scrollbalken erscheint, aber er scrollt nicht automatisch mit, und weiter als die angebene Größe kann ich auch nicht scrollen, was aber dynamisch erfolgen sollte, da ich am Anfang noch nicht weiß, wie groß die Fläche werden soll.
 
Ruf mal beim Scrollpane die Methode "revalidate" auf, wenn du die Grösse der Leinwand veränderst. Dann sollte es sich anpassen.
 
revalidate() geht nicht, dann verschwindet die Scrollpane komischerweise.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben