我的问题是为什么当我按下恢复时(在 Windows 平台上)JFrame
它非常小(见下面的截图)。
我使用有关JFrame状态的代码:
this.setExtendedState(View.MAXIMIZED_BOTH);
我需要用setMinimumSize()
吗?
确保在AFTER 之后this.setExtendedState(JFrame.MAXIMIZED_BOTH)
执行。此外,如果您有电话,请确保它在电话之后执行。 setVisible(true)
setResizable(false)
setExtendedState()
我想没有人理解他的问题。他不想最大化它,他希望当他按下“Restore Down”时,窗口不会变得那么小。因此,您需要做的是,“向下还原”将窗口恢复到按下“最大化”之前的先前大小。
所以我做的是这个
int Width = (int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().getWidth();
int Height = (int) java.awt.Toolkit.getDefaultToolkit().getScreenSize().getHeight();
this.setSize(Width-100,Height-100);
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
因此,每次按下“Restore Down”时,第一次,尺寸将是屏幕尺寸 - 宽度和高度均为 100 像素。
什么课View
?
如果您尝试将JFrame
大小设置为最大值,请执行此操作(注意我使用了JFrame
类中可用的静态变量而不是View
):
JFrame frame=...;
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
由于这是我的问题的第一个也是最准确的问题,我将在这里添加我发现的内容。我知道它已经 3 岁了,但我的回答可能会在未来对某人有所帮助。我的问题和上面一样。当我构建我使用的 Jframe 时:
frame.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
当我单击“还原”按钮时,窗口非常小,位于屏幕的左上角。我通过调用解决了这个问题:
frame.setBounds(100, 100, 450, 300);
在 setVisible(true) 之后。这是我编辑后的代码,原始代码是使用 Eclipse WindowBuilder 创建的。我只是在编辑它之后。下面是完整的代码:
public class MainWindow extends JFrame {
private JPanel contentPane;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
MainWindow frame = new MainWindow();
frame.setVisible(true);
frame.setBounds(100, 100, 450, 300);
frame.setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public MainWindow() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);
//setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}
}
基本上在 Jframe 变得可见之后发生了什么(据我所知),它首先设置为 450x300 的大小,然后立即将大小更改为最大化。现在,当您按下还原按钮时,它会将其设置为 450x300 大小。我目前正在寻找一种方法来覆盖用于将窗口大小设置为以前大小的方法(在达到最大值之前),但我还没有到需要询问的地步。
appFrame = new JFrame("BufferedImage layers");
Dimension asRestoredDown = new Dimension(400,400);//first time restored
appFrame.setMinimumSize(asRestoredDown);
appFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
appFrame.setExtendedState(appFrame.getExtendedState() | JFrame.MAXIMIZED_BOTH);