首页 > 解决方案 > 您可以创建一个单独的方法来创建 JFrame 大小吗?

问题描述

我之前提出的问题被标记为重复问题,并且链接的问题与我需要的问题并不接近。我在问是否可以创建一个我可以调用来设置 JFrame 大小的方法。

所以,我正在尝试制作一个 JFrame GUI,但我想在 GUI 方法之外创建方法,就像在 GUISize 方法中一样,当 GUISize 方法不是方法并且代码是方法的位置时,JFrame 工作叫做。

这是一个作业,但是,没有一个在技术上被标记。我只是好奇是否可以为我的 Frame 创建一个 GUISize 方法。

我试图在方法之外引用框架但不能,我已经寻找在你构建它的方法之外引用 JFrame 的方法,但不能

import java.awt.*;
import javax.swing.*;

public class CQAC {

    public static void main(String args[])
    {
        GUI();
    }

    public static void GUI()
    {
        JFrame MainFrame = new JFrame("My First GUI");
        MainFrame.setTitle("CQAC");
        MainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        MainFrame.getContentPane().add(GUISize);
        GUISize();

        MainFrame.setVisible(true);

    }


    public static void GUISize()
    {
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;
        GUI.MainFrame.setSize(screenWidth / 2, screenHeight / 2); 
        GUI.setLocation((screenWidth/4)-8,screenHeight/4);
    }

}

该代码应该打开一个空白的JFrame,它是用户屏幕大小的一半并放置在屏幕中间,目前JFrame没有打开

标签: javaswingmethodsjframe

解决方案


您当前的代码无法编译,我不会解释所有原因。 static会比其他任何事情更快地愚弄你,学会没有它生活,它有它的目的,你使用的方式真的不是其中之一。

反而。首先创建一个类的新实例,然后在它的构造阶段构建您需要的元素。这样,您就可以摆脱“无法引用非静态,等等,等等,等等”的错误。

相反,创建一个方法,其唯一工作是创建主框架,仅此而已,让它返回这个实例。

接下来,使用框架的实例,将其传递给您的“调整大小”方法和 folia,您就有了一个工作模式

例如...

import java.awt.Dimension;
import java.awt.Toolkit;
import javax.swing.JFrame;

public class CQAC {

    public static void main(String args[]) {
        // Get out of the static context as soon as possible
        new CQAC();
    }

    public CQAC() {
        JFrame mainFrame = makeMainFrame();
        adaptToCurrentScreen(mainFrame);
        mainFrame.setVisible(true);
    }

    protected JFrame makeMainFrame() {
        JFrame mainFrame = new JFrame("My First GUI");
        mainFrame.setTitle("CQAC");
        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        return mainFrame;
    }

    protected void adaptToCurrentScreen(JFrame frame) {
        Toolkit kit = Toolkit.getDefaultToolkit();
        Dimension screenSize = kit.getScreenSize();

        System.out.println(screenSize);
        int screenHeight = screenSize.height;
        int screenWidth = screenSize.width;
        frame.setSize(screenWidth / 2, screenHeight / 2);
        //frame.setLocation((screenWidth / 4) - 8, screenHeight / 4);
        // And because this is simpler :/
        frame.setLocationRelativeTo(null);
    }

}

附带说明一下,getScreenSize通过这种方式返回原始屏幕大小,它不会考虑 MacOS 上的任务栏或停靠栏和菜单栏等内容的大小,这可能会使您的窗口在显示时“看起来”偏移。

相反,您应该使用 的边界GraphicsConfiguration,附加到GraphicsDevice...GraphicsEnvironment并且不,这些事情并不容易,例如

您可能还想看看将信息传递给方法或构造函数


推荐阅读