Hi!
Ich suche gerade nach einer Möglichkeit, die Größe eines JFrames nur relativ verändern zu können.
Hier mal ein Beispiel, um mein Anliegen genauer zu erläutern:
Dieses Fenster kann nur Größen im Verhältnis 16:9 annehmen. Die Größe wird aber immer erst dann justiert, wenn die Maustaste losgelassen wurde. Gibt es eine Möglichkeit, dass dies "just in time" passiert, also während der Rahmen noch gezogen wird?
Ich suche gerade nach einer Möglichkeit, die Größe eines JFrames nur relativ verändern zu können.
Hier mal ein Beispiel, um mein Anliegen genauer zu erläutern:
Java:
import java.awt.Dimension;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import javax.swing.JFrame;
public class ResizeJFrame extends JFrame {
private final float scale;
private Dimension oldSize;
public ResizeJFrame(final int width, final int height) {
super(width + ":" + height);
this.scale = width / (float) height;
addComponentListener(new ComponentListener() {
@Override
public void componentShown(ComponentEvent e) {}
@Override
public void componentResized(ComponentEvent e) {
final Dimension size = getSize();
final int diffWidth = size.width - oldSize.width;
final int diffHeight = size.height - oldSize.height;
final boolean widerThanTaller = Math.round(diffWidth / scale) > diffHeight;
final boolean wider = diffWidth > 0;
final boolean taller = diffHeight > 0;
final int widthToHeight = Math.round(size.width / scale);
final int heightToWidth = Math.round(size.height * scale);
final Dimension heightChange = new Dimension(size.width, widthToHeight);
final Dimension widthChange = new Dimension(heightToWidth, size.height);
final Dimension newSize;
if (wider)
if (taller)
if (widerThanTaller)
newSize = heightChange;
else
newSize = widthChange;
else
newSize = heightChange;
else
if (taller)
newSize = widthChange;
else
if (widerThanTaller)
newSize = widthChange;
else
newSize = heightChange;
if (!size.equals(newSize)) {
setSize(newSize);
oldSize = getSize();
}
}
@Override
public void componentMoved(ComponentEvent e) {}
@Override
public void componentHidden(ComponentEvent e) {}
});
final int startFactor = 10;
setSize(width * startFactor, height * startFactor);
oldSize = getSize();
setLocationRelativeTo(null);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ResizeJFrame(16, 9).setVisible(true);
}
}
Zuletzt bearbeitet: