按下恢复时JFrame非常小

时间:2012-11-02 20:27:00

标签: java swing jframe

我的问题是,为什么当我按下恢复(在Windows平台上)时,JFrame非常小(请参阅下面的截图)。

我使用此代码关于JFrame的 State

this.setExtendedState(View.MAXIMIZED_BOTH);

我需要使用setMinimumSize()

enter image description here

5 个答案:

答案 0 :(得分:3)

确保this.setExtendedState(JFrame.MAXIMIZED_BOTH)已执行 AFTER setVisible(true)。此外,如果您有setResizable(false)来电,请确保执行 AFTER setExtendedState()

答案 1 :(得分:3)

我认为没有人理解他的问题。他不想最大化它,他想当他按下“Restore Down”时,窗口不会变得那么小。所以你需要做的是,“Restore Down”会在按下“Maximize”之前将窗口恢复到之前的大小。

所以我做的就是这个

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);

因此,每次按“还原”时,第一次,屏幕尺寸将为屏幕尺寸 - 宽度和高度均为100像素。

答案 2 :(得分:2)

什么课程是View

如果您尝试将JFrame大小设置为最大值,请执行此操作(请注意,我使用的是JFrame类中的静态变量,而不是View):

JFrame frame=...;
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);

答案 3 :(得分:0)

由于这是我的问题的第一个也是最准确的问题,我将添加我在此处找到的内容。我知道它已经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大小。我目前正在寻找一种方法来覆盖用于将窗口大小设置为先前大小的方法(在达到最大值之前),但我还没有达到我需要问的程度。

答案 4 :(得分:0)

    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);