JScrollpane problem

Status
Nicht offen für weitere Antworten.

raffnix

Bekanntes Mitglied
Hallo.
Ich habe eine Classe:
Code:
class Polyones extends JComponent{

in dieser classe steht eine PaintComponent mit der ich ein bild anzeige.
das Bild wird auf einer gui gezeigt die in dieser klasse dteht.
Code:
class ShowPoly extends JFrame

dort versuche ich nun eine scrollpane einzubinden, sodass ich das bild scrollen kann leider wird die scrollbar mir nocht nichtmal angezeigt??
Code:
this.mal = new Polyones();
		mal.addMouseListener(this);
		mal.addMouseMotionListener(this);
		mal.setSize(500,500);
		
		JScrollPane bildscroll = new JScrollPane(mal);
		bildscroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		bildscroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
                getContentPane().add(mal, BorderLayout.CENTER);

woran liegts.. und vorallem wie bekomme ich diese scrollbar in meine gui??
 
Und aufs neue:
Nicht die Komponente auf das Panel adden, sondern die ScrollPane
benutz bei solchen Fragen bitte in Zukunft die Suche :roll:
 
ähmm..
ja das klappt so.. allerdings lässt sich nichts scrollen.
die grösse der componente ändert sich ja auch...
ich habe gelesen dass es mit revalidate() eine möglichkeit gibt der scrollpane die aktuelle grösse der componente mitzuteilen. nur verstanden habe ich das nicht 🙁
wenn ich ein bild lade rufe ich revalidate auf.. aber wie bekommt meine scrollpane mit das sich die grösse geändert hat??
 
bei mir nicht.
beim programmstart ist kein bild angezeigt.
wenn ich nun eins auswähle. wird es angezeigt. es ist aber grösser als der anzeige bereich.
ich kann das sehen wenn ich die ganze gui vergrössere. dann taucht der nicht angezeigte bereich auf.
 
mach mal statt
Code:
mal.setSize(500,500);
Code:
mal.setPreferredSize(new Dimension(500,500));
 
Ich schreibe mal nur den teil für das laden des bildes..

Code:
class Polyones extends JComponent{
	Image img;
...
..
public void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
			//Ein Bild anzeigen
			 if ( img != null){
				g2d.drawImage(img, 0, 0, this);
		         }  ...
..
}
...
.
public void machImage(String path){
 	try{
 	img = Toolkit.getDefaultToolkit().getImage(path);
 	}
 	catch (Exception exc){
 		System.out.println("Die Datei" + path +"ist kein Bild oder ist beschädigt");
 	}
 	repaint();
 }
..
.
 
ahja. Ich hatte den Anfang deines Postes übersehen wo du geschrieben hast, was Polyones für ne Klasse ist ^^.

Ansonsten hatte ich auch setPreferredSize(...) benutzt wie es Wildcard schrieb. Bringt das bei dir ne änderung?
 
ja das versuche ich auch gerade. weiss nur nicht wie ich an einen image observer rankomme..

wenn ich versuche:
img.getWidth()

sagt er ich brauche einen image observer in der klammer.
wo bekomm ich denn den her? aus der Api werd ich da irgendwie nicht schlau
 
jup hab ich:
Code:
public void paintComponent(Graphics g){
		super.paintComponent(g);
		 g2d = (Graphics2D) g;
			//Ein Bild anzeigen
			 if ( img != null){
			 	panWidth = img.getWidth(null);
			 	panHeight = img.getHeight(null);
				g2d.drawImage(img, 0, 0, this);				
				revalidate();
		         }

ich hab aber noch probleme die grösse zu setzen.
Code:
mal.setPreferredSize(new Dimension((int)mal.panWidth,(int)mal.panHeight));

das geht leider nicht
 
un ja es ändert nicht die grösse .. obwohl ich weiss, dass panWidth + pan Height die jeweiligen bildwerte haben..
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben