JScrollPane klappt nicht. Wer weiß Rat?

Status
Nicht offen für weitere Antworten.

iflash

Mitglied
Hallo Gemeinde,


das Anliegen ist ein bisschen kompliziert:

1. Ich habe einen JFrame (MainWindow), in dem ein JPanel (inner) liegt, das wiederum 100 kleine JPanels (die aus mehreren Elementen bestehen) in besonderer Anordnung enthält. Die kleinen Panels werden über eine spezielle Klasse (pages) erzeugt, und ohne Layout in das darüberliegende Panel (inner) direkt gesetzt.

Setze ich dieses Panel (inner) in einen JFrame, wird alles korrekt angezeigt.

Mein Problem: Ich möchte dem Fenster Scrollbalken spendieren, doch sobald ich die beiden auskommentierten Zeilen (siehe Quelltext) einbaue, verschwindet mein schönes Panel mit all seinen Kindern. Was genau schief geht, sehe ich leider nicht. Ich habe diverse Layoutmanager für die innere Box probiert - kein Erfolg.

Besonders merkwürdig: Ich habe probiert, das inner JPanel in ein darüberliegendes Panel zu adden ( "add(p);") aber dann verschwindet meine Anzeige ebenfalls.

Weiß jemand Rat?

Code:
public class MainWindow extends JFrame {

	JScrollPane scrollpane;
	
	public MainWindow () {
		
		super("Flatplan 0.02");
		
		JMenuBar menue = new JMenuBar(); 
		JMenu mFile = new JMenu("Datei"); 
		JMenuItem iNew   = new JMenuItem("Neue Datei"); 
		JMenuItem iOpen = new JMenuItem("Öffnen..."); 

		setJMenuBar(menue); 
		menue.add(mFile);
		mFile.add(iNew);
		mFile.add(iOpen); 

		JPanel p = new JPanel( null );
		JPanel inner = new JPanel ( null );

		Page[] pages = new Page[400];
		setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
		initializePages( pages );

		for ( int i = 0; i < 100; inner.add(pages[i++]) ) pages[i].setSize( 50,90 );

 		p.add (inner );
		add( p);     <---------------  Warum geht das nicht?

//		scrollpane = new JScrollPane ( p ); 
ALTERNATIV:
//		scrollpane = new JScrollPane ( inner ); 


//		add(scrollpane, BorderLayout.CENTER);

		setSize(1024,768 );
		setVisible( true);
	}

Gruß

iFlash
 
S

SlaterB

Gast
du redest so gespannt von den 100 kleinen Panels..
funktioniert es denn wenn du 99 drin hast?

oder auch nicht wenn du gar keins drin hast? warum erwähnst du diese dann? ;)

scrollPane.setMinimumSize()
scrollPane.setPreferredSize()
scrollPane.setSize()
und/ oder
p.setMinimumSize()
p.setPreferredSize()
p.setSize()
 
B

blacksh33p

Gast
mach mal:
Code:
JScrollPane p_scrolll = new JScrollPane();
oben

unten dann
Code:
 p.add (inner );

p_scroll.getViewPort().add(p);


add( p_scroll);     <---------------  Warum geht das nicht?
und auskommentiertes weglassen.
 

iflash

Mitglied
SlaterB hat gesagt.:
du redest so gespannt von den 100 kleinen Panels..
funktioniert es denn wenn du 99 drin hast?

oder auch nicht wenn du gar keins drin hast? warum erwähnst du diese dann? ;)

scrollPane.setMinimumSize()
scrollPane.setPreferredSize()
scrollPane.setSize()
und/ oder
p.setMinimumSize()
p.setPreferredSize()
p.setSize()



Hallo Slater,

du hast Recht: Ich stelle die Frage anders: Warum funktioniert es nicht, das inner-Panel einzublenden, wie im folgenden Sourcecode:


Code:
package flatplan;

import javax.swing.*;
import java.awt.*;

import pages.Page;

public class MainWindow extends JFrame {

	JScrollPane scrollpane;
	
	public MainWindow () {
		
		super("Fenster");
		setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
		setSize (100,100);
		
		JPanel p = new JPanel( null );
		JPanel inner = new JPanel ( null  );
		inner.setLayout( new GridLayout( 3,3,100,100));
		
		for ( int i = 0; i < 9; inner.add( new JLabel ("Label" + i++ ) ) ) ;
		
//		p.add( inner ); 					// <--- Warum geht das nicht ...
//		add ( p );	    					// <--- Warum geht das nicht ...
//		scrollpane = new JScrollPane ( p ); // <--- Warum geht das nicht ...

		add (inner);							// ... und das hier schon? (anstelle der drei Zeilen oben)	
		scrollpane = new JScrollPane ( inner ); // ... und das hier schon? (anstelle der drei Zeilen oben)
		
		getContentPane().add(scrollpane, BorderLayout.CENTER);

		setSize(100,100 );
		setVisible( true);
	}

	public static void main(String[] args) {
		
		new MainWindow ( );
		
	}
}


Lieben Gruß

iFlash
 

iflash

Mitglied
blacksh33p hat gesagt.:
mach mal:
Code:
JScrollPane p_scrolll = new JScrollPane();
oben

unten dann
Code:
 p.add (inner );

p_scroll.getViewPort().add(p);


add( p_scroll);     <---------------  Warum geht das nicht?
und auskommentiertes weglassen.

Geht leider nicht. Weder sehe ich Scrollbalken noch den Inhalt ... ;(

Trotzdem Danke für die Mühe ...

iFlash
 
B

blacksh33p

Gast
ich habs...

dumme sache mach mal bei
Code:
JPanel p = new JPanel( null );
      JPanel inner = new JPanel ( null  )

die "null" bei beiden raus^^
 

iflash

Mitglied
blacksh33p hat gesagt.:
ich habs...

dumme sache mach mal bei
Code:
JPanel p = new JPanel( null );
      JPanel inner = new JPanel ( null  )

die "null" bei beiden raus^^

Nett gedacht, aber genau das darf ich nicht machen, denn das Panel "inner" darf unter keinen Umständen einen Layout-Manager zugewiesen bekommen, sonst zerhaut es mir mein Mühsam aufgebautes Design der Childs. Lasse ich die "null" weg, nimmt Swing by default den FlowLayout-Manager.

Um das zu umgehen, dachte ich eben, ich pack das Panel "inner" in ein anderes Panel, bei dem ich dann ein Layout-Management zulasse. Nur will es mir ums Verrecken nicht gelingen, das Panel P auf dem JFrame zu legen ...

Buhuuu!

iFlash
 
B

blacksh33p

Gast
ups was vergessen :)))

Code:
public class MainWindow extends JFrame {

   JScrollPane scrollpane = new JScrollPane();
   
   public MainWindow () {
      
      super("Fenster");
      setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
      setSize (100,100);
      
      JPanel p = new JPanel();
      JPanel inner = new JPanel ();
      p.setLayout(new BorderLayout());
      inner.setLayout( new GridLayout( 3,3,100,100));
      
      for ( int i = 0; i < 9; inner.add( new JLabel ("Label" + i++ ) ) ) ;
      
      p.add( inner );                // <--- Warum geht das nicht ...
      add ( p );                      // <--- Warum geht das nicht ...
      scrollpane.getViewport().add(p); // <--- Warum geht das nicht ...

      //add (inner);                     // ... und das hier schon? (anstelle der drei Zeilen oben)   
      //scrollpane = new JScrollPane ( inner ); // ... und das hier schon? (anstelle der drei Zeilen oben)
      
      getContentPane().add(scrollpane, BorderLayout.CENTER);

      setSize(100,100 );
      setVisible( true);
   }
 
B

blacksh33p

Gast
so wies nun mit dem aussieht sahs eben bevor ichs umgeändert hab jedenfalls bei mir aus *g
 

iflash

Mitglied
blacksh33p hat gesagt.:
so wies nun mit dem aussieht sahs eben bevor ichs umgeändert hab jedenfalls bei mir aus *g

Hallo Black,


nein, das geht leider so nicht: Um es einfacher zu machen, hier der ganze Quellcode - es sind nur zwei Dateien:

MainWindow.java

Code:
package flatplan;

import javax.swing.*;
import pages.Page;

public class MainWindow extends JFrame {

	JScrollPane scrollpane = new JScrollPane ( ) ;
	
	public MainWindow () {
		
		super("Fenster");
		Page[] pages = new Page[400];

		setDefaultCloseOperation ( JFrame.EXIT_ON_CLOSE );
		setSize (100,100);
		
		JMenuBar menue = new JMenuBar(); 
		JMenu mFile = new JMenu("Datei"); 
		JMenuItem iNew   = new JMenuItem("Neue Datei"); 
		JMenuItem iOpen = new JMenuItem("Öffnen..."); 

		setJMenuBar(menue); 
		menue.add(mFile);
		mFile.add(iNew);
		mFile.add(iOpen);

		JPanel p = new JPanel(  );
		JPanel inner = new JPanel ( null );
//		inner.setLayout( new GridLayout( 3,3,100,100));
		
		initializePages( pages );
		for ( int i = 0; i < 100; inner.add(pages[i++]) ) pages[i].setSize( 50,90 );
//		for ( int i = 0; i < 9; inner.add( new JLabel ("Label" + i++ ) ) ) ; 
	
		add( inner );
//		scrollpane = new JScrollPane ( p ); // <--- Warum geht das nicht ... 
//		getContentPane().add(scrollpane, BorderLayout.CENTER);

		setSize(100,100 );
		setVisible( true);
	}

	public static void initializePages( Page pages[] ) {								// Erzeugt und initialisiert Seiten

		for (int i = 0; i < 200; i++ )
		{
			pages[i] = new Page( i, "Titel", "Inhalt ..." );
		}

	}

	public static void main(String[] args) {
		
		new MainWindow ( );
		
	}
}

Und hier der zweite Teil mit der Klasse, die die vielen kleinen Panels zeichnet: Pages.java

Code:
import java.awt.*;
import javax.swing.*;

public class Page extends JPanel { 

	private String pname = new String ("Unbena ..");										// Titel der Seite
	private String pdescription = new String ("sssss ...")						;	// Beschreibung der Seite
	private int pnumber = 0;																	// Seitenzahl
	private int posx = 0, posy = 0;															// Position der Seite im Fenster
	private final int height = 90, width = 50, offset = 25, hspace=10, vspace= 20;												// Wird einmal bestimmt und bleibt dann unveränderlich!

	private JTextArea description = new JTextArea( "...");
	private JTextField name = new JTextField( "Titel" );
	private JLabel number = new JLabel ( "0" );
	private Font fname = new Font ( "Verdana", Font.BOLD, 9 );
	private Font fdescription = new Font ( "Verdana", Font.PLAIN, 8 );
	private Font fnumber = new Font ( "Verdana", Font.PLAIN, 8 );
	

	public Page( int newpnumber, String newpname, String newpdescription ) {
		
		String text;
		int ppl = 20;
	
		text = newpnumber + "";
	
		pnumber = newpnumber;															// Seiteninformationen eintragen 
		pname = newpname;
		pdescription = newpdescription;

		setLayout( new BorderLayout () );
	
		description.setFont( fdescription );
		description.setLineWrap(true);
		name.setFont (fname);
		number.setFont (fnumber);

		number.setText( text );
		name.setHorizontalAlignment( JTextField.CENTER );
		
		if ( newpnumber % 2 == 0 ) {													// Linke Seite?
			setBounds(        offset+(width+hspace)*(newpnumber%ppl), offset+(newpnumber/ppl)*(height+vspace), width,height );												// ACHTUNG: DIESER MODULO/DIVISOR (20) BESAGT, WIEVIELE SEITEN PER ZEILE!
			number.setHorizontalAlignment( JLabel.LEFT );
			add ( number, BorderLayout.PAGE_END );			
		}
		else {																													// Rechte Seite!
			setBounds(             offset+(width+hspace)*(newpnumber%ppl)-8, offset+(newpnumber/ppl)*(height+vspace), width, height);											// ACHTUNG: DIESER MODULO BESAGT, WIEVIELE SEITEN PER ZEILE!
			number.setHorizontalAlignment( JLabel.RIGHT );
			add ( number, BorderLayout.PAGE_END );			
		}	
		add (name, BorderLayout.PAGE_START );
		add (description, BorderLayout.CENTER);

	}
}


Wenn du das compilierst, sollte ein Fenster erscheinen mit ein paar kleineren Elementen drin. Alles, was ich will: Wie - verflixt noch eins - schaffe ich Scrollbalken in das Fenster, OHNE das Layout kaputtzumachen?

Lieben Gruß

iFlash
 

André Uhres

Top Contributor
Code:
inner.setPreferredSize(new Dimension(1300,600));
add( new JScrollPane(inner ));
 

iflash

Mitglied
André Uhres hat gesagt.:
Code:
inner.setPreferredSize(new Dimension(1300,600));
add( new JScrollPane(inner ));


André, du bist eine Wucht! :applaus:

Dass es soooo einfach ist, hätte ich im Leben nicht vermutet. Mit welchem Buch hast du Java (Swing) gelernt? Das hole ich mir auch :lol: :###


Edit:

Eine letzte Frage: Wenn ich will, dass der Inhalt der scrollbaren Fläche immer mittig (horizontal wie vertikal) angezeigt wird, wenn das Fenster größer als der Inhalt gezogen wird, was brauche ich dazu?


Lieben Gruß


Armin
 
B

blacksh33p

Gast
jo so gehts auch, aber bei mir hats auch so geklappt, wie ichs geschirben hab auch mit deiner package datei :) immer wieder malwas neues *g

da kriegstn problem durch dein Grid sieht ja so aus

x---100----x-----100-----x----100

Deine Zellen sind immer 100 breit somit kriegsten deine texte nur mittig wennes hinkriegst, wenn deine texte im grid zentriert sind, aber ka wie das geht *g
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
B JScrollPane Horizontal klappt nicht. AWT, Swing, JavaFX & SWT 4
volcanos Scrollen: JScrollPane mit Graphics g und Java-Fonts extends Frame ? AWT, Swing, JavaFX & SWT 5
E JScrollPane mit JPanel verbinden AWT, Swing, JavaFX & SWT 1
B Swing JScrollPane scrollt nicht AWT, Swing, JavaFX & SWT 10
P JTextarea (in JScrollPane) zeigt nur die beiden letzten Einträge an? AWT, Swing, JavaFX & SWT 0
O Swing "Eigenes" JPanel wird dem JScrollPane nicht hinzugefügt AWT, Swing, JavaFX & SWT 5
E Komponenten von JScrollPane werden nicht richtig ermittelt AWT, Swing, JavaFX & SWT 2
E wie in JScrollPane auf JTextArea zugreifen AWT, Swing, JavaFX & SWT 12
N Swing JScrollPane mit Tastatur bedienen? AWT, Swing, JavaFX & SWT 0
F JScrollPane anzeige AWT, Swing, JavaFX & SWT 7
K Swing JScrollPane wird nicht angezeigt wenn man Components darstellt. AWT, Swing, JavaFX & SWT 2
M Swing JPanel in JScrollPane AWT, Swing, JavaFX & SWT 3
M Problem mit Add JScrollPane AWT, Swing, JavaFX & SWT 25
P Swing JEditorPane in Kombination mit JScrollPane AWT, Swing, JavaFX & SWT 29
S Swing jScrollPane - pro Eintrag der Liste, die jCheckBoxes Speichern die in dem Eintrag aktiviert wurden AWT, Swing, JavaFX & SWT 2
T Swing Probleme mit repaint() bzw. JScrollPane AWT, Swing, JavaFX & SWT 7
D JScrollPane in JTabbedPane AWT, Swing, JavaFX & SWT 3
MaxG. Swing JScrollPane AWT, Swing, JavaFX & SWT 10
Soloeco Swing JScrollPane AWT, Swing, JavaFX & SWT 6
A Swing Probleme mit dem adden von JButtons zur JScrollPane AWT, Swing, JavaFX & SWT 2
A JScrollPane soll JPanel mit JButtons enthalten und eine Scollbar anzeigen AWT, Swing, JavaFX & SWT 1
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
B LayoutManager GridBagLayout und JScrollPane AWT, Swing, JavaFX & SWT 5
Thallius JScrollPane Scrollpos setzen nach Neuzeichnen AWT, Swing, JavaFX & SWT 3
P MalProgramm mit JScrollPane und Canvas AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane Tabelle ändern (2 Tabellen) AWT, Swing, JavaFX & SWT 7
U JScrollPane -> JTabbedPane u.A. AWT, Swing, JavaFX & SWT 3
A Layout-Manager, JScrollPane, ... Chaos AWT, Swing, JavaFX & SWT 5
V JScrollPane im zur Laufzeit verändernden JFrame AWT, Swing, JavaFX & SWT 0
W Swing Größenänderung vom JPanel im JScrollPane und anschließendes positionieren AWT, Swing, JavaFX & SWT 2
X Swing JButton's zum JScrollPane hinzufügen geht nicht. Bitte um Hilfe. AWT, Swing, JavaFX & SWT 9
G JTextArea mit JScrollPane wird nicht angezeigt AWT, Swing, JavaFX & SWT 2
K Swing JScrollPane - JScrollBar anzeigen, wenn Frame verkleinert wird AWT, Swing, JavaFX & SWT 3
N Swing Problem beim Scrollen mit JScrollPane AWT, Swing, JavaFX & SWT 6
Bluedaishi JScrollpane AWT, Swing, JavaFX & SWT 0
L JScrollPane scrollt nicht !! AWT, Swing, JavaFX & SWT 3
F JScrollPane Position setzen (x=0, y=0) AWT, Swing, JavaFX & SWT 2
R JScrollPane überdeckt JPanel? AWT, Swing, JavaFX & SWT 7
H JTree in JScrollPane passt sich nicht an Größe von JPanel an AWT, Swing, JavaFX & SWT 2
S JScrollPane und BorderLayout AWT, Swing, JavaFX & SWT 1
M Mehrere Jpanel in einem JScrollPane (Layout) AWT, Swing, JavaFX & SWT 2
W Swing JScrollPane für mein Fenster AWT, Swing, JavaFX & SWT 4
A Swing Probleme mit JScrollPane AWT, Swing, JavaFX & SWT 6
F JTable mit JScrollPane AWT, Swing, JavaFX & SWT 4
I JPanel in JScrollPane verkleinert sich leider nicht .... AWT, Swing, JavaFX & SWT 2
G JScrollPane bricht am Ende der Anzeige nicht um AWT, Swing, JavaFX & SWT 2
J Swing JTextPane mit JScrollPane auf JPanel scrollen nicht AWT, Swing, JavaFX & SWT 6
W Sichtbarer Bereich JScrollPane vs. JList AWT, Swing, JavaFX & SWT 3
B Swing JPanel in JScrollPane einfügen AWT, Swing, JavaFX & SWT 2
S 2D-Grafik Transparentes JScrollPane AWT, Swing, JavaFX & SWT 0
S 3D-Grafik 3d Grafik auf einem JPanel oder im JScrollPane AWT, Swing, JavaFX & SWT 1
R Ändern Default-Verhalten von JScrollpane in einer JScrollpane AWT, Swing, JavaFX & SWT 1
S JScrollPane --> Programm hängt sich beim scrollen auf AWT, Swing, JavaFX & SWT 2
A JScrollPane - ScrollBar Buttongröße verändern AWT, Swing, JavaFX & SWT 1
J Bilder auf JPanel (im JScrollPane) nacheinander laden AWT, Swing, JavaFX & SWT 0
A Swing JScrollPane Problem AWT, Swing, JavaFX & SWT 6
H Swing JScrollPane mit "viel Inhalt" scrollt zu langsam (inkl. See-For-Yourself.jar :D) AWT, Swing, JavaFX & SWT 2
T Swing JScrollPane in JPanel - Breite dynamisch, Höhe fix - wie? AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane in JScrollPane - Problem AWT, Swing, JavaFX & SWT 3
K Bug in JScrollPane? AWT, Swing, JavaFX & SWT 4
T Swing JScrollPane Farbe der Scrollbar AWT, Swing, JavaFX & SWT 3
M JScrollPane Header AWT, Swing, JavaFX & SWT 3
G JScrollPane über JScrollPane AWT, Swing, JavaFX & SWT 2
V LayoutManager JScrollPane verwirft Elementanordnung AWT, Swing, JavaFX & SWT 3
B JScrollPane Problem AWT, Swing, JavaFX & SWT 2
D Swing JScrollPane AWT, Swing, JavaFX & SWT 7
H cardlayout und jscrollpane AWT, Swing, JavaFX & SWT 14
F 2D-Grafik Skalieren der Scrollbars beim Zoomen einer JScrollPane AWT, Swing, JavaFX & SWT 4
G JScrollPane reagiert nicht auf Änderung der JPanel-Größe AWT, Swing, JavaFX & SWT 4
C jPanel auf jScrollPane zentrieren AWT, Swing, JavaFX & SWT 3
M Swing JScrollPane (Parent JTextArea) aktualisieren + neue Zeile AWT, Swing, JavaFX & SWT 5
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
A Swing Korrekte JTable.rowAt(point) für JTable in JScrollPane AWT, Swing, JavaFX & SWT 5
D Label über JScrollPane AWT, Swing, JavaFX & SWT 3
S JScrollPane reagiert nicht AWT, Swing, JavaFX & SWT 3
X JScrollPane zu JTable hinzufügen AWT, Swing, JavaFX & SWT 16
H JScrollPane - JEditorPane und HTML-Tabelle AWT, Swing, JavaFX & SWT 2
D LayoutManager JScrollPane mit dynamischem Inhalt AWT, Swing, JavaFX & SWT 8
P Swing JScrollpane AWT, Swing, JavaFX & SWT 2
B JScrollPane scrollt nicht immer automatisch AWT, Swing, JavaFX & SWT 2
V Swing JScrollPane Viewport verschieben AWT, Swing, JavaFX & SWT 2
J JScrollPane Probleme AWT, Swing, JavaFX & SWT 3
S Swing JScrollPane verliert Scrollbars AWT, Swing, JavaFX & SWT 5
D Swing JTable in JScrollpane beliebig verbreitern AWT, Swing, JavaFX & SWT 5
A Swing Anzeige Text in JScrollpane AWT, Swing, JavaFX & SWT 8
J Swing Unteren Abstand für JTable in JScrollPane festlegen AWT, Swing, JavaFX & SWT 10
xehpuk Swing Line-wrapping von JTextPane (in JScrollPane) AWT, Swing, JavaFX & SWT 3
M JScrollPane Problem AWT, Swing, JavaFX & SWT 6
S Swing JScrollpane und ViewPort AWT, Swing, JavaFX & SWT 4
D JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 12
X JScrollPane funzt net... AWT, Swing, JavaFX & SWT 5
H jscrollpane AWT, Swing, JavaFX & SWT 12
RELAXccc Swing JTree + JScrollPane, refresh Problem AWT, Swing, JavaFX & SWT 17
A Problem mit JScrollPane in einer JScrollpane AWT, Swing, JavaFX & SWT 4
B JScrollPane Problem AWT, Swing, JavaFX & SWT 25
T Swing JScrollPane- und Tabelle-Header Problem AWT, Swing, JavaFX & SWT 25
P Swing JScrollPane-Inhalt: Grösse anpassen AWT, Swing, JavaFX & SWT 6
G Swing Höhe des View eines JScrollPane fest auf Höhe des JScrollPane setzen! AWT, Swing, JavaFX & SWT 4
A JScrollPane AWT, Swing, JavaFX & SWT 16
C Swing JScrollPane und Scroll-Geschwindigkeit AWT, Swing, JavaFX & SWT 8

Ähnliche Java Themen


Oben