Java 如何设置JFrame的最大大小?

Java 如何设置JFrame的最大大小?,java,Java,有以下代码: double gridWidth=columnNumber*(IMAGE_WIDTH_NORMAL+10)+(columnNumber+2)*10; double screenWidth=Toolkit.getDefaultToolkit().getScreenSize().getWidth()*0.8; screenWidth=(gridWidth>=screenWidth) ? screenWidth : gridWidth; double gridHeight=(ru

有以下代码:

double gridWidth=columnNumber*(IMAGE_WIDTH_NORMAL+10)+(columnNumber+2)*10;
double screenWidth=Toolkit.getDefaultToolkit().getScreenSize().getWidth()*0.8;
screenWidth=(gridWidth>=screenWidth) ? screenWidth : gridWidth;

double gridHeight=(rules.size()+2)*(IMAGE_HEIGHT_NORMAL+10)+rules.size()*20+(rules.size()+2)*10;
double screenHeight=Toolkit.getDefaultToolkit().getScreenSize().getHeight()*0.8;
screenHeight=(gridHeight>=screenHeight) ? screenHeight : gridHeight;

setSize((int)screenWidth, (int)screenHeight);
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();  
setLocation(screenSize.width/2-getWidth()/2, screenSize.height/2-getHeight()/2);
setMaximumSize(new Dimension((int)gridWeight, (int)gridHeight));
setVisible(true);

此代码执行以下操作:计算帧的首选宽度和高度,如果大小大于我想要的大小(宽度和高度的80%),则应用程序设置另一个大小;但是我想允许用户在jframe上单击“全屏”图标,以最大化jframe的首选大小(setMaximumSize()方法),但它的代码不起作用!总是一个windows最大化到我的笔记本电脑的全屏!我怎样才能修好它

我不确定是否正确理解了您的问题,但我建议使用

设置JFrame的位置和大小

 int x = screenSize.width/2-getWidth()/2;
 int y = screenSize.height/2-getHeight()/2;
 int width = (int)gridWeight;
 int height = (int)gridHeight);
 setBounds(x, y, width, height);
为了最大化JFrame,我建议使用

像这样

setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);

我不确定我是否正确理解了您的问题,但我建议使用

设置JFrame的位置和大小

 int x = screenSize.width/2-getWidth()/2;
 int y = screenSize.height/2-getHeight()/2;
 int width = (int)gridWeight;
 int height = (int)gridHeight);
 setBounds(x, y, width, height);
为了最大化JFrame,我建议使用

像这样

setExtendedState(java.awt.Frame.MAXIMIZED_BOTH);

您需要这样做:

_mainDialog.setBounds(矩形)

_mainDialog.setExtendedState(windowsState)

示例

        addWindowStateListener(new WindowStateListener() {

            @Override
            public void windowStateChanged(WindowEvent e) {
                int oldState = e.getOldState();
                int newState = e.getNewState();

                if ((oldState & JFrame.ICONIFIED) == 0 && (newState & JFrame.ICONIFIED) != 0) {
                    setMainDialogRectangle(minRectangle, JFrame.NORMAL);
                }
                else if ((oldState & JFrame.ICONIFIED) != 0 && (newState & JFrame.ICONIFIED) == 0) {
                    setMainDialogRectangle(minRectangle, JFrame.NORMAL);
                }
                else if ((e.getNewState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH) {
                    setMainDialogRectangle(maxRectangle, JFrame.MAXIMIZED_BOTH);
                }
                else if ((oldState & JFrame.MAXIMIZED_BOTH) != 0 && (newState & JFrame.MAXIMIZED_BOTH) == 0) {
                    setMainDialogRectangle(medRectangle, JFrame.NORMAL);
                }
            }
        });

您需要这样做:

_mainDialog.setBounds(矩形)

_mainDialog.setExtendedState(windowsState)

示例

        addWindowStateListener(new WindowStateListener() {

            @Override
            public void windowStateChanged(WindowEvent e) {
                int oldState = e.getOldState();
                int newState = e.getNewState();

                if ((oldState & JFrame.ICONIFIED) == 0 && (newState & JFrame.ICONIFIED) != 0) {
                    setMainDialogRectangle(minRectangle, JFrame.NORMAL);
                }
                else if ((oldState & JFrame.ICONIFIED) != 0 && (newState & JFrame.ICONIFIED) == 0) {
                    setMainDialogRectangle(minRectangle, JFrame.NORMAL);
                }
                else if ((e.getNewState() & JFrame.MAXIMIZED_BOTH) == JFrame.MAXIMIZED_BOTH) {
                    setMainDialogRectangle(maxRectangle, JFrame.MAXIMIZED_BOTH);
                }
                else if ((oldState & JFrame.MAXIMIZED_BOTH) != 0 && (newState & JFrame.MAXIMIZED_BOTH) == 0) {
                    setMainDialogRectangle(medRectangle, JFrame.NORMAL);
                }
            }
        });