JScrollPane funktioniert nicht

davidh38

Bekanntes Mitglied
JFrame jframe = new JFrame("Image");
jframe.setContentPane(new JScrollPane(this));

this ist ein JPanel in dem ein Bild gezeichnet wird. wenn das bild größer ist, als die Size, die ich durch Size gesetzt habe, sind leider keine Scrollbalken zu sehen. Woran liegt das?
 

bERt0r

Top Contributor
Ummmmm normalerweise macht man das so:
Java:
JFrame jframe = new JFrame("Image");
JScrollPane scrollPane=new JScrolPane(this);
jframe.add(scrollPane);
Weiters geht die ScrollPane nach der PreferredSize und die Vertical/Horizontal ScrollBarPolicy muss natürlich auch stimmen.
 
S

SlaterB

Gast
in erster Linie an zu wenig geposteten Code,

wenn du paintComponent im JPanel überschreibst, dann kann Swing daraus nicht automatisch ableiten was du dir als Größe wünschst,
setze setPreferredSize() !

und ein JScrollPane als ContentPane des JFrames könnte problematisch sein, wahrscheinlich aber auch nicht

edit:
> wenn das bild größer ist, als die Size, die ich durch Size gesetzt habe
für das JScrollPane ist wirklich die PreferredSize spannend, nicht die Size an sich, falls im JPanel gesetzt ;)
die wird evtl. sogar noch vom JScrollPane überschrieben
 
Zuletzt bearbeitet von einem Moderator:

davidh38

Bekanntes Mitglied
in erster Linie an zu wenig geposteten Code,

wenn du paintComponent im JPanel überschreibst, dann kann Swing daraus nicht automatisch ableiten was du dir als Größe wünschst,
setze setPreferredSize() !

und ein JScrollPane als ContentPane des JFrames könnte problematisch sein, wahrscheinlich aber auch nicht

edit:
> wenn das bild größer ist, als die Size, die ich durch Size gesetzt habe
für das JScrollPane ist wirklich die PreferredSize spannend, nicht die Size an sich, falls im JPanel gesetzt ;)
die wird evtl. sogar noch vom JScrollPane überschrieben

also, egal, was ich mache ein ScrollPane kommt nicht zum Vorschein. Bitte schaut euch das nochmal an.

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class ScrollPane extends JPanel {

	public static void main (String [] args){
	
		
		JFrame jFrame = new JFrame("test");
		
		ScrollPane s = new ScrollPane();
		JScrollPane myScrollPane = new JScrollPane(s);
		jFrame.add(myScrollPane);
		jFrame.setPreferredSize(new Dimension(300,300));
		jFrame.setVisible(true);
		
		
	}
		public void paintComponent(Graphics g) {
		super.paintComponent(g);


		for (int i = 0; i <1000; i++) {
			for (int j = 0; j < 1000;j++){
				g.setColor(new Color(200, 100, 20));
				g.fillRect( i,  j, 1, 1);
			}

		}

	}	
	
	
	
}
 
S

SlaterB

Gast
das JFrame braucht keine PreferredSize, eher eine Size, die gibst du fest vor,

du musst festlegen wie groß das ScrollPane sein soll, von deren Größe hängen doch die Scrollbars ab,
s.setPreferredSize(new Dimension(300,300));
und die Scrollbalken erscheinen falls das JFrame nicht zu groß wird
 

jgh

Top Contributor
neben dem schon erwähnten, zwei kleine Zusätze:
Deine Klasse sollte nicht den Namen einer Klasse des JDK haben, also bspw. MyScrollPanel anstelle von ScrollPane, die es im java.awt package schon gibt.
Und außerdem solltest du bei einem solchen Programm immer die DefaultCloseOperation definieren.

Nebenbei braucht deine paintComponet auf meinem Rechner immer deutlich über 2 sek, was bei deinem Code aber auch kein Wunder ist...du zeichnest 1.000.000 x 1Pixel mit der selben Color!!!
Die ScrollBalken sind dann nicht das prob...nur die Reaktionszeit

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;

public class MyScrollPane extends JPanel {
	public MyScrollPane() {
		setPreferredSize(new Dimension(800, 800));
	}

	public static void main(String[] args) {

		JFrame jFrame = new JFrame("test");

		MyScrollPane s = new MyScrollPane();
		JScrollPane jScrollPane = new JScrollPane(s);
		jFrame.getContentPane().add(jScrollPane);
		jFrame.setSize(new Dimension(300, 300));
		jFrame.setLocationRelativeTo(null);
		jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		jFrame.setVisible(true);

	}

	public void paintComponent(Graphics g) {
		super.paintComponent(g);
		long period = System.nanoTime();
		for (int i = 0; i < 1000; i++) {
			for (int j = 0; j < 1000; j++) {
				g.setColor(new Color(200, 100, 20));
				g.fillRect(i, j, 1, 1);
			}
		}
		period = System.nanoTime() - period;
		System.out.println("t for paintComponent= " + (period / 1000000)
				+ " ms=");
	}
}
 

Xeonkryptos

Bekanntes Mitglied
Damit du deine Scrollpane siehst, musst du dieser einer setPreferredSize() mitgeben, sonst wird sie dir einfach nicht angezeigt. Ich weiß das... ich hatte das Prob mal auch :D
 
S

SlaterB

Gast
nein nein nein, die Scrollpane wird in das ContentPane eingefügt, welches BorderLayout hat, damit wird das ScrollPane maximiert,
PreferredSize dieser Komponente ist egal,

da gibts schon feine Details zu beachten ;)
 

davidh38

Bekanntes Mitglied
nein nein nein, die Scrollpane wird in das ContentPane eingefügt, welches BorderLayout hat, damit wird das ScrollPane maximiert,
PreferredSize dieser Komponente ist egal,

da gibts schon feine Details zu beachten ;)

verstehe ich das jetzt richtig, dass wenn ich ein Pixelbild von 1000x1000 habe, die prefferedSize des ScrollPanes so setzen soll:

s.setPrefferedSize(new Dimension(1000,1000));

Wäre das so der "normale" Weg?
 
S

SlaterB

Gast
nein nein nein nochmal, bin ich mal wieder so undeutlich? ;)

- das JFrame braucht irgendeine Size die direkt die Anzeige bestimmt, sonst ziemlich klein am Anfang, kann aber vergrößert werden,
- das JScrollPane füllt im aktuellen Layoutaufbau immer das JFrame komplett, da bringt PreferredSize nix
- es geht die ganze Zeit um das JPanel, dieses ist im JScrollPane drin, das JScrollPane muss wissen wie groß das JPanel ist, damit es ausrechnen kann welchen Bereich es anzeigt, wie groß die ScrollBars werden usw.

bzw. du hast es ja schon verstanden, wie ich jetzt sehe, ist nur ein Problem mit schlechten Klassennamen,
> s.setPrefferedSize(new Dimension(1000,1000));
ja genau, einfach ausprobieren vor der Nachfrage ist auch erlaubt ;)

Xeonkryptos meinte das vielleicht auch, habe ich dann ebenso falsch verstanden
 

davidh38

Bekanntes Mitglied
nein nein nein nochmal, bin ich mal wieder so undeutlich? ;)

- das JFrame braucht irgendeine Size die direkt die Anzeige bestimmt, sonst ziemlich klein am Anfang, kann aber vergrößert werden,
- das JScrollPane füllt im aktuellen Layoutaufbau immer das JFrame komplett, da bringt PreferredSize nix
- es geht die ganze Zeit um das JPanel, dieses ist im JScrollPane drin, das JScrollPane muss wissen wie groß das JPanel ist, damit es ausrechnen kann welchen Bereich es anzeigt, wie groß die ScrollBars werden usw.

bzw. du hast es ja schon verstanden, wie ich jetzt sehe, ist nur ein Problem mit schlechten Klassennamen,
> s.setPrefferedSize(new Dimension(1000,1000));
ja genau, einfach ausprobieren vor der Nachfrage ist auch erlaubt ;)

Xeonkryptos meinte das vielleicht auch, habe ich dann ebenso falsch verstanden

Warum funktioniert folgendes nicht? Gibt es vielleicht geringfügige Änderungen, die ich mache kann, damit ich den folgenden Code laufen lassen kann?

Java:
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;


public class ScrollPane extends JPanel {

	public static void main (String [] args){
	
		ScrollPane s = new ScrollPane();
		s.visualize();
	

	}	
	
public void visualize(){
	JFrame jFrame = new JFrame("test");
	
//	ScrollPane s = new ScrollPane();
//	s.setPreferredSize(new Dimension(300,300));
	JScrollPane myScrollPane = new JScrollPane(this);
	jFrame.add(myScrollPane);
	jFrame.setPreferredSize(new Dimension(300,300));
	jFrame.setVisible(true);
	
	
}
	public void paintComponent(Graphics g) {
	super.paintComponent(g);


	for (int i = 0; i <1000; i++) {
		for (int j = 0; j < 1000;j++){
			g.setColor(new Color(200, 100, 20));
			g.fillRect( i,  j, 1, 1);
		}

	}
}
	
}
 
S

SlaterB

Gast
ja, endlich den setPreferredSize()-Aufruf reinnehmen von dem ich die ganze Zeit spreche?
dieser Thread hier ist noch mein Ende ;)

Zeile 24 wieder aufnehmen, das s. am Anfang natürlich weg,

fürs JFrame bringt wie gesagt bzw. wie man testen kann setPreferredSize() nix, wenn dann setSize() sinnvoll,
wenn alles bei 300 liegt, dann ist natürlich nicht so viel zu scrollen,
du hast ja selber vorher schon 1000x1000 angedacht für das JPanel, also für Zeile 24, denn in dem Panel wird ja auch derart viel gemalt,

das painten sollte wie gesagt wurde optimiert werden, so wie bisher ist ausprobieren, z.B. scrollen, gewiss keine Freude,
mit fillRect() kann man auch in einem Befehl 1000x1000 malen
 

davidh38

Bekanntes Mitglied
ja, endlich den setPreferredSize()-Aufruf reinnehmen von dem ich die ganze Zeit spreche?
dieser Thread hier ist noch mein Ende ;)

Zeile 24 wieder aufnehmen, das s. am Anfang natürlich weg,

fürs JFrame bringt wie gesagt bzw. wie man testen kann setPreferredSize() nix, wenn dann setSize() sinnvoll,
wenn alles bei 300 liegt, dann ist natürlich nicht so viel zu scrollen,
du hast ja selber vorher schon 1000x1000 angedacht für das JPanel, also für Zeile 24, denn in dem Panel wird ja auch derart viel gemalt,

das painten sollte wie gesagt wurde optimiert werden, so wie bisher ist ausprobieren, z.B. scrollen, gewiss keine Freude,
mit fillRect() kann man auch in einem Befehl 1000x1000 malen

Was soll ich sagen? Danke für dein Geduld und deine Hilfe :oops::toll:
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J JScrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 5
U Swing JPane und JScrollpane in JSplitpane-Seite: Scrollen funktioniert nicht AWT, Swing, JavaFX & SWT 3
P JPanel in JScrollPane -> funktioniert nicht(vertikal scro AWT, Swing, JavaFX & SWT 5
N JScrollPane funktioniert nicht so, wie ichs gerne hätte AWT, Swing, JavaFX & SWT 2
W JscrollPane funktioniert nicht AWT, Swing, JavaFX & SWT 3
F JScrollPane und JList funktioniert net richtig ? 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
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
B JScrollPane Horizontal klappt nicht. 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
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
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

Ähnliche Java Themen

Neue Themen


Oben