【问题标题】:Can you create a seperate method for creating JFrame Sizes?您可以创建一个单独的方法来创建 JFrame 大小吗?
【发布时间】:2019-08-11 01:52:43
【问题描述】:

我提出的上一个问题被标记为重复问题,并且链接的问题与我需要的问题并不接近。我在问是否可以创建一个我可以调用来设置 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没有打开

【问题讨论】:

  • 答案是“是”,问题是,您在不建议使用static 的地方使用它,并且您在调整大小的方法中引用了一个与此无关的实例与您创建的那个

标签: java swing methods jframe


【解决方案1】:

您当前的代码无法编译,我不会详细说明原因。 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 的边界,附加到GraphicsEnvironment 中的GraphicsDevice ...不,这些事情不容易,for example

您可能还想看看Passing Information to a Method or a Constructor

【讨论】:

    猜你喜欢
    • 2014-01-15
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 2019-10-12
    • 2020-11-26
    • 1970-01-01
    • 2021-08-29
    • 2014-06-15
    相关资源
    最近更新 更多