您好我正在基于我的项目的基于摇摆的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);
Run Code Online (Sandbox Code Playgroud)
但结果是我的框架没有得到给定的边界它只是禁用调整大小功能.如果我删除最后一个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);
}
Run Code Online (Sandbox Code Playgroud)
我尝试使用IComponentListener,但它没有帮助我随机调整框架大小.我还尝试使用SwingUtilities.invokeLater将resizable标志设置为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());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7125 次 |
| 最近记录: |