Hallo, ich habe das Problem, dass ich in meinem LWJGL Spiel, seit dem ich es vergößerbar gemacht habe, einen Schwarzen Rand habe.
Dieser verschwindet allerdings sobalt ich das Fenster vergrößen oder verkleiner.
Aber seht selbst
Ich frage mich gerade, was Benutzer machen, die einen 1024 * 768 Monitor haben.
Man kann doch die Bildschirm-Dimensionen mit Java ermitteln und dann entsprechend die Größe setzen. Notfalls abzüglich des Rahmens vom JFrame und/oder der Windows-Startleiste.
Das kommt jetzt vieleicht ein bisschen blöd rüber, aber ich habe eben selbst per Zufall eine Lösung gefunden :twisted: .
Als ich nämlich den Tipp mit der Blidschrimgröße einbauen wollte, habe ich herausgefunden, dass wenn ich
Offensichtlich ist, dass es auf Windows(7) passiert… Ich weiss jetzt nicht, ob man dass als Bug bezeichnen kann, geschweige denn, wer für diesen zur Verantwortung gezogen werden kann. Wenn der schwarze Rand 5 Pixel Breit bzw. Hoch ist, liegt es aber genau daran, dass Java von Windows im Non-Resizable-Mode eines Windows falsche Insets-Werte bekommt, bzw das Window 10*10 Pixel (5 an jeder Seite) zu groß gezeichnet wird.
import java.awt.Graphics;
import java.awt.Insets;
import java.awt.Frame;
public class ResizableTest {
public static void main(String[] args) throws Exception {
final Frame c = new Frame("Resizable test");
c.pack();
final Insets i = c.getInsets();
final Frame f = new Frame() {
private static final long serialVersionUID = 1L;
String inside, outside, insets, shouldBe;
@Override
public void paint(Graphics g) {
Insets i2 = getInsets();
int x = i.left;
int y = i.top;
int w = getWidth() - i.left - i.right;
int h = getHeight() - i.top - i.bottom;
inside = "inside width: " + getWidth() + "; height: " + getHeight();
outside = "outside width: " + c.getWidth() + "; height: " + c.getHeight();
insets = "insets left: " + i2.left + "; right : " + i2.right + "; ";
insets += "top :" + i2.top + "; bottom: " + i2.bottom;
shouldBe = "shouldBe left: " + i.left + "; right : " + i.right + "; ";
shouldBe += "top :" + i.top + "; bottom: " + i.bottom;
g.setColor(Color.YELLOW);
g.fillRect(x, y, w, h);
g.setColor(Color.BLACK);
g.drawString(inside, 10, i.top + 15);
g.drawString(outside, 10, i.top + 30);
g.drawString(insets, 10, i.top + 45);
g.drawString(shouldBe, 10, i.top + 60);
}
};
f.setVisible(true);
c.setVisible(true);
f.setBounds(0, 0, 320, 240);
c.setBounds(320, 0, 320, 240);
Thread.sleep(5000);
f.setResizable(false);
Thread.sleep(5000);
f.setResizable(true);
Thread.sleep(5000);
f.dispose();
c.dispose();
}
}```
EDIT: Wie ich es gedacht hab'. Jeweils 5 Pixel schwarzer Rand und jeweils 5 Pixel die auf jeden Fall links und mit Sicherheit auch oben fehlen. Leider sind die 5 Pixel nicht verbindlich. Wählt man ein anderes Design kann es schon wieder ein anderer Wert sein. Beim klassischen Windows(95/98)-Style ists z.B. nur ein Pixel pro Kante.