正如您在Java Swing中所了解的那样,您可以通过拖动鼠标,垂直,水平或两者来重新调整帧的大小,但我喜欢只用鼠标拖动来一次性重新调整垂直和水平尺寸,这也适用于用户在所有位置移动鼠标。我想要的一个例子是Windows中的单人纸牌游戏,正如你在游戏中所知,当用户拖动鼠标重新调整窗口大小时,框架将在垂直和水平位置按比例重新调整大小。
Java Swing中的主框架(窗口)是否可能?
答案 0 :(得分:1)
Java Swing中的主框架(窗口)是否可能?
不是没有一些JNI / JNA。
答案 1 :(得分:0)
一个黑客就是这样的。使用ComponentListener
并覆盖其componentResized()
。每次调整框架大小时,它都会将大小设置为相对宽度和高度。不确定这是否是您正在寻找的所需效果,但您可以测试它。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
public class SampleFrame {
public Dimension lastSize = new Dimension(400,300);
public JFrame frame;
public SampleFrame() {
frame = new JFrame("Sample Frame");
frame.setSize(lastSize);
frame.setLocationRelativeTo(null);
frame.addComponentListener(new ComponentListener() {
public void componentResized(ComponentEvent e) {
Dimension currentFrameSize = frame.getSize();
int widthDelta = Math.abs(lastSize.width - currentFrameSize.width);
int heightDelta = Math.abs(lastSize.height - currentFrameSize.height);
if(heightDelta > widthDelta) {
double scaleRatio = currentFrameSize.getHeight() / lastSize.height;
currentFrameSize.width = (int) (lastSize.width * scaleRatio);
} else {
double scaleRatio = currentFrameSize.getWidth() / lastSize.width;
currentFrameSize.height = (int) (lastSize.height * scaleRatio);
}
frame.setSize(currentFrameSize);
lastSize = currentFrameSize;
frame.setLocationRelativeTo(null);
}
public void componentMoved(ComponentEvent e) {
}
public void componentShown(ComponentEvent e) {
}
public void componentHidden(ComponentEvent e) {
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
public static void main(String[] args) {
new SampleFrame();
}
}