Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何保持JFrame的纵横比_Java_Swing_Jframe - Fatal编程技术网

Java 如何保持JFrame的纵横比

Java 如何保持JFrame的纵横比,java,swing,jframe,Java,Swing,Jframe,我正在创建一个应用程序,我相信如果它在扩展/最小化时能够保持其纵横比会更好。我将最小大小设置为1000x800,并希望它保持5:4的比例 是否已经有了这样的方法,或者我需要自己添加一个事件处理程序来检查帧是否已调整大小,它将提供尽可能接近的大小 如果问题重复,对不起,我找不到 编辑 谢谢所有帮助我完成这件事的人。下面是我如何保持我的应用程序的大小,以满足它正在使用的屏幕大小,而不会变得太大或太小,并保持纵横比。 干杯 试试这个: @Override public void componentRe

我正在创建一个应用程序,我相信如果它在扩展/最小化时能够保持其纵横比会更好。我将最小大小设置为1000x800,并希望它保持5:4的比例

是否已经有了这样的方法,或者我需要自己添加一个事件处理程序来检查帧是否已调整大小,它将提供尽可能接近的大小

如果问题重复,对不起,我找不到

编辑

谢谢所有帮助我完成这件事的人。下面是我如何保持我的应用程序的大小,以满足它正在使用的屏幕大小,而不会变得太大或太小,并保持纵横比。 干杯

试试这个:

@Override
public void componentResized(ComponentEvent arg0) {
    int W = 4;  
    int H = 3;  
    Rectangle b = arg0.getComponent().getBounds();
    arg0.getComponent().setBounds(b.x, b.y, b.width, b.width*H/W);
}

请在此处查看可调整大小的


这是通过从0,0到宽度、高度的距离,然后根据给定的纵横比(使用正弦和余弦)重新分配到x和y来实现的。

坦率地说,保持内容的纵横比更容易、更简单,消除了系统最大化窗口时可能出现的任何奇怪现象:P@MadProgrammer但如果我这样做,框架内的内容看起来会很奇怪,而且我不确定这是否可能,因为除了框架之外,我所有组件的大小都是由布局管理器设置的SO?首先设计一个布局管理器,重点是保持单个容器的比例,然后将其余组件添加到该容器中container@MadProgrammer,当然,:D在内容窗格中,是包含所有内容的窗格。干杯:)@MadProgrammer我已经编辑了我的问题,以显示我对纵横比的最终解决方案,你认为如何?在哪个类中被重写
JFrame
(及其父类)不实现此方法FormComponentResistized(java.awt.event.ComponentEvent evt){}我们可以假设他们没有使用某种表单编辑器吗?请对代码和代码片段、HTML/XML或输入/输出等结构化文档使用代码格式。为此,选择文本并单击消息发布/编辑表单顶部的
{}
按钮。
addComponentListener(new ComponentAdapter(){…})
@Override
public void componentResized(ComponentEvent arg0) {
    int W = 4;  
    int H = 3;  
    Rectangle b = arg0.getComponent().getBounds();
    arg0.getComponent().setBounds(b.x, b.y, b.width, b.width*H/W);
}