Hi ich bins mal wieder..habe noch ne Frage zu JScrollPane..oder eher ein Verständnisproblem.....
Also folgender Hintergrund:
ich habe ein JInternalFrame dem ich ein JScrollPane hinzufüge, welches
als Parameter ein ImagePanel bekommt.
** AUSZUG aus meinem JInternalFrame**
** Hier das ImagePanel **
Das funktioniert auch alles Wunderbar. Ich lade ein Bild und es wird in einem internem Fenster angezeigt!
Das interne Fenster befindet sich übrigens in einem JDesktopPane! Wenn ich nun das interne Fenster verkleinere (Resize), erscheinen auch die Scrollbars! Das ist super! So muss es ja auch sein! Aber mein Problem ist, das anfangs das interne Fenster immer in Vollgröße des darinbefindlichen Bildes dargestellt wird! Wenn das Bild im internen Fenster nun aber Größer als das JDesktopPane ist, dann habe ich ein Problem. Mein internes Fenster ist nur zum Teil auf dem
JDesktopPane zu sehen, und ich habe ja keine Scrollbars im internen Fenster..da dieses ja groß genug fürs Bild ist!
Es gibt nun 2 Möglichkeiten
1.) ich teste, ob mein internes Fenster die Grenzen des JDesktopPanes überschreiten würde und passe die interne
Fenstergröße an!
Problem..sehr komplex und irgendwie nicht ganz Pixelgenau!..musste da jeden Pixel messen um es ans laufen zu bekommen.
Das kann es doch nicht sein ?? Und ausserdem habe ich hier manchmal Pixelungenauigkeiten ?!
2.) Möglichkeit wäre ich mache einfach scrollbars auf meinem JDesktopPane und nicht im internen Fenster!
Aber hier bekomme ich das nicht hin, weil ich folgende Konstellation habe!
JFrame bekommt mit setContentPane() eine ToolBar und die bekommt mit Add() den
JDesktopPanel. Wenn ich hier dem JFrame oder der ToolBar oder dem JDesktopPane
ein JScrollPane gebe..dann wird nichts mehr gezeichnet..hmmmm ?
** Hier Auszug aus JFrame ***
**************************************************************************
Versteht jemand mein eigentliches Problem ? Wäre toll wenn jemand da weiss was ich falsch mache!
Hier nochmal nen Screenshot mit meinem Prob!
http://www.finalbrain.de/Problem.jpg
..Weiss jemand dafür einen Rat, oder habe ich kompletten Müll abgelassen ?
MFG
Finalbrain
Also folgender Hintergrund:
ich habe ein JInternalFrame dem ich ein JScrollPane hinzufüge, welches
als Parameter ein ImagePanel bekommt.
** AUSZUG aus meinem JInternalFrame**
Code:
ImageIcon graf = new ImageIcon("c:\\Bild.jpg");
ImagePanel imgP = new ImagePanel(graf.getImage());
JScrollPane scroll = new JScrollPane(imgP);
this.getContentPane().add(scroll);
** Hier das ImagePanel **
Code:
import java.awt.*;
import javax.swing.*;
class ImagePanel extends JPanel
{
private Image image;
private int gx, gy;
public ImagePanel(Image image)
{
this.image = image;
gx = image.getWidth(this);
gy = image.getHeight(this);
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
MediaTracker mt = new MediaTracker(this);
mt.addImage(image, 0);
try
{
mt.waitForAll();
}
catch (InterruptedException e)
{
}
g.drawImage(image,0,0,image.getWidth(this), image.getHeight(this),this);
}
public Dimension getPreferredSize()
{
return new Dimension(gx,gy);
}
public int getWidth()
{
return gx;
}
public int getHeight()
{
return gy;
}
}
Das funktioniert auch alles Wunderbar. Ich lade ein Bild und es wird in einem internem Fenster angezeigt!
Das interne Fenster befindet sich übrigens in einem JDesktopPane! Wenn ich nun das interne Fenster verkleinere (Resize), erscheinen auch die Scrollbars! Das ist super! So muss es ja auch sein! Aber mein Problem ist, das anfangs das interne Fenster immer in Vollgröße des darinbefindlichen Bildes dargestellt wird! Wenn das Bild im internen Fenster nun aber Größer als das JDesktopPane ist, dann habe ich ein Problem. Mein internes Fenster ist nur zum Teil auf dem
JDesktopPane zu sehen, und ich habe ja keine Scrollbars im internen Fenster..da dieses ja groß genug fürs Bild ist!
Es gibt nun 2 Möglichkeiten
1.) ich teste, ob mein internes Fenster die Grenzen des JDesktopPanes überschreiten würde und passe die interne
Fenstergröße an!
Problem..sehr komplex und irgendwie nicht ganz Pixelgenau!..musste da jeden Pixel messen um es ans laufen zu bekommen.
Code:
boolean passt = true;
if ((internRelativeX + imgP.getWidth()) >= instancePW.getSize().getWidth() - RIGHTRAHMEN ||
(internRelativeY + imgP.getHeight()) >= instancePW.getSize().getHeight()-TOOLBAR_HEIGHT)
{
internRelativeX=0;
internRelativeY=0;
passt = false;
}
else
{
this.setLocation(this.internRelativeX,this.internRelativeY);
internRelativeX+=IWIN_JUMPX;
internRelativeY+=IWIN_JUMPY;
this.setResizable(false);
this.setMaximizable(false);
pack();
}
if (passt == false)
{
int ax = imgP.getWidth();
int ay = imgP.getHeight();
if (ax >= instancePW.getSize().getWidth()-RIGHTRAHMEN &&
ay >= instancePW.getSize().getHeight()-TOOLBAR_HEIGHT)
{
ax = (int)instancePW.getSize().getWidth()-RIGHTRAHMEN ;
ay = (int)instancePW.getSize().getHeight()-TOOLBAR_HEIGHT;
}
else
if (ax >= instancePW.getSize().getWidth()-RIGHTRAHMEN )
{
ax = (int)instancePW.getSize().getWidth()-RIGHTRAHMEN ;
ay = imgP.getHeight() + SCROLLHOR;
}
else
if (ay >= instancePW.getSize().getHeight()-TOOLBAR_HEIGHT)
{
ay = (int)instancePW.getSize().getHeight()-TOOLBAR_HEIGHT;
ax = imgP.getWidth() + SCROLLVERT;
}
this.setSize(ax,ay);
this.setLocation(this.internRelativeX,this.internRelativeY);
}
Das kann es doch nicht sein ?? Und ausserdem habe ich hier manchmal Pixelungenauigkeiten ?!
2.) Möglichkeit wäre ich mache einfach scrollbars auf meinem JDesktopPane und nicht im internen Fenster!
Aber hier bekomme ich das nicht hin, weil ich folgende Konstellation habe!
JFrame bekommt mit setContentPane() eine ToolBar und die bekommt mit Add() den
JDesktopPanel. Wenn ich hier dem JFrame oder der ToolBar oder dem JDesktopPane
ein JScrollPane gebe..dann wird nichts mehr gezeichnet..hmmmm ?
** Hier Auszug aus JFrame ***
Code:
ToolBar newContentPane = new ToolBar(this);
newContentPane.setOpaque(true);
this.setContentPane(newContentPane);
this.getContentPane().add(desktop);
**************************************************************************
Versteht jemand mein eigentliches Problem ? Wäre toll wenn jemand da weiss was ich falsch mache!
Hier nochmal nen Screenshot mit meinem Prob!
http://www.finalbrain.de/Problem.jpg
..Weiss jemand dafür einen Rat, oder habe ich kompletten Müll abgelassen ?
MFG
Finalbrain