Hallo,
folgendes.
Ich habe ein Frame, in diesem ist ein ScrollPane. In diesem wiederum ist ein Panel.
Dem ScrollPane gebe ich die möglichkeit seine größe zu ändern, wenn die größe des Frame geändert wird.
Die größe des Panels setze ich einmal fest und ändere es nie wieder.
Nun ändert sich jedoch zt. auch die größe des Panels wenn ich das Frame ändere. Kann mir jemand sagen wieso? Und wie ich das verhindern kann.
Im Anhang habe ich eine jar mit dem Beispiel (einmal mal draufklicken und die größe ein paar mal ändern)
Zum besseren Verständniss noch der code
folgendes.
Ich habe ein Frame, in diesem ist ein ScrollPane. In diesem wiederum ist ein Panel.
Dem ScrollPane gebe ich die möglichkeit seine größe zu ändern, wenn die größe des Frame geändert wird.
Die größe des Panels setze ich einmal fest und ändere es nie wieder.
Nun ändert sich jedoch zt. auch die größe des Panels wenn ich das Frame ändere. Kann mir jemand sagen wieso? Und wie ich das verhindern kann.
Im Anhang habe ich eine jar mit dem Beispiel (einmal mal draufklicken und die größe ein paar mal ändern)
Zum besseren Verständniss noch der code
Java:
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Frame;
import java.awt.Insets;
import java.awt.Label;
import java.awt.MouseInfo;
import java.awt.Panel;
import java.awt.Point;
import java.awt.ScrollPane;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.UUID;
public class example {
/**
* @param args
*/
public static void main(String[] args)
{
Frame frame = getFrame();
frame.setAlwaysOnTop(true);
frame.setVisible(true);
frame.setAlwaysOnTop(false);
setListener(frame);
}
private static Frame getFrame()
{
Frame frame = new Frame();
Font font = null;
ScrollPane pane = null;
Panel panel = new Panel();
Label label = null;
Insets inset = null;
int xSize = 0;
int ySize = 0;
frame.setLayout(null);
frame.setFont(font);
// to know the size of the border we have to draw the Frame
frame.setVisible(true);
frame.setVisible(false);
inset = frame.getInsets();
label = new Label();
label.setText("example text");
label.setBounds(15, 15, 200, 20);
panel.add(label);
panel.setBounds(0, 0, 250, 50);
pane = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED);
pane.add(panel);
pane.setBounds(inset.left, inset.top, 250, 50);
panel.setBackground(Color.blue);
pane.setBackground(Color.red);
frame.add(pane);
inset = frame.getInsets();
xSize = pane.getWidth() + inset.left + inset.right;
ySize = pane.getHeight() + inset.bottom + inset.top;
frame.setSize(xSize, ySize);
frame.setLocation(getLocation(frame));
return frame;
}
/**
* sets the listener for the frame
* @param frame
*/
private static void setListener(final Frame frame)
{
frame.addWindowListener
(
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
frame.addComponentListener
(
new ComponentListener()
{
public void componentHidden(ComponentEvent e) {
// nothing
}
public void componentMoved(ComponentEvent e) {
// nothing
}
public void componentResized(ComponentEvent e)
{
Component[] compArr = frame.getComponents();
ScrollPane pane = (ScrollPane) compArr[0];
Insets inset = frame.getInsets();
int xSize = frame.getWidth() - inset.left - inset.right;
int ySize = frame.getHeight() - inset.bottom - inset.top;
pane.setBounds(inset.left, inset.top, xSize, ySize);
}
public void componentShown(ComponentEvent e) {
// nothing
}
}
);
}
/**
*
* @return reads the Text in the version.info file in the version folder in the jar
*/
private static String getVersionText()
{
String uuid = UUID.randomUUID().toString();
String version = "";
String versionFolder = "version/";
String versionFile = "version.info";
int numberLines = 0;
String input;
String test = ClassLoader.getSystemResource(versionFolder + versionFile).toString();
InputStream inStream = ClassLoader.getSystemResourceAsStream(versionFolder + versionFile);
if(inStream == null)
{
return "InputStream is null";
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
while( null != (input = reader.readLine()) )
{
numberLines++;
version = version.concat(uuid + input + uuid);
}
version = version.replace(uuid + uuid, "\r\n").replace(uuid, "");
} catch (FileNotFoundException e) {
version = e.getMessage();
}
catch (IOException e)
{
version = e.getMessage();
}
if(numberLines == 1)
{
version = "\r\n".concat(version);
}
return version;
}
private static Point getLocation(Frame frame)
{
Point point = new Point();
double mouseX = MouseInfo.getPointerInfo().getLocation().getX();
double mouseY = MouseInfo.getPointerInfo().getLocation().getY();
double positionX = mouseX - (frame.getWidth() - 15);
double positionY = mouseY - 15;
if((positionX) < 20)
{
positionX = 50;
}
point.setLocation(positionX, positionY);
return point;
}