gpt4 book ai didi

java - Swing setResizable 和 setBounds

转载 作者:行者123 更新时间:2023-12-04 21:28:09 25 4
gpt4 key购买 nike

您好,我正在处理项目中基于 swing 的 gui 部分,我需要将 setBounds JFrame 的方法与 setResizable 调用同步,所以我这样做:

    setResizable(true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle rect = new Rectangle(screenSize.width/2 - screenSize.width/4, screenSize.height/2 - screenSize.height/4, screenSize.width/2, screenSize.height/2);
setBounds(rect);
setResizable(false);

但结果是我的框架没有获得给定的边界,它只是禁用了调整大小功能。如果我删除最后一个 setResizable 调用,那么表单将获得正确的边界。实际上我有一个基于框架和许多面板的向导,我可以像状态一样更改框架上的面板。只有在一个面板中,我想给用户调整框架大小的机会,否则它应该是固定大小。所以在我的主框架中我实现了两个方法,enableWizardMode 和 enablePlayingGameMode:

    @Override
public void enablePlayingGameMode() {
setResizable(true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(new Rectangle(screenSize.width/10, screenSize.height/10, screenSize.width - screenSize.width/5, screenSize.height- screenSize.height/5));
}

@Override
public void enableWizardMode() {
setResizable(true);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
setBounds(new Rectangle(screenSize.width/2 - screenSize.width/4, screenSize.height/2 - screenSize.height/4, screenSize.width/2, screenSize.height/2));
setResizable(false);
}

我尝试使用 IComponentListener,但它并没有帮助我随机调整框架大小。我还尝试使用 SwingUtilities.invokeLater 将可调整大小的标志设置为 false,但这也无济于事。有人知道这个问题的解决方案吗??我运行 Linux 和 oracle jdk7。谢谢。

最佳答案

设置 preferredSize 以及调用 pack() 对我来说一直很有效。

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Toolkit;

import javax.swing.JFrame;

public class SizeFoo {

public static void main(String[] args) {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Rectangle rect = new Rectangle(screenSize.width / 2 - screenSize.width
/ 4, screenSize.height / 2 - screenSize.height / 4,
screenSize.width / 2, screenSize.height / 2);
System.out.println("rect: " + rect);
JFrame frame = new JFrame("Test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(new Dimension(rect.width, rect.height));
frame.setResizable(false);
frame.pack();
frame.setLocation(rect.x, rect.y);
//frame.setLocationRelativeTo(null);
frame.setVisible(true);
System.out.println("JFrame size:" + frame.getSize());
}
}

关于java - Swing setResizable 和 setBounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9443990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com