java - 您可以创建一个单独的方法来创建 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没有打开
解决方案
您当前的代码无法编译,我不会解释所有原因。 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
并且不,这些事情并不容易,例如
您可能还想看看将信息传递给方法或构造函数
推荐阅读
- c++ - c++ 如何在运行时通过错误代码给用户一个合适的异常?
- node.js - 在应用程序中分离“dev”和“prod”模式的最佳方法是什么?
- javascript - react-data-grid 7.0 是否修复了可拖动列的大小调整问题?
- reactjs - 如何在 reactJs 子组件中实现分页
- sql - 甲骨文空间。与面型要素空间相关的线型要素起点 (sdo_anyinteract)
- c# - 带有 IEmailSender 的 SmtpClient asp net core 3.0 在 Windows 上工作,但在 Linux 上不工作
- javascript - 如何获取“名称”变量的第一个数组值
- sql-server - Azure 自动化中用于运行 SQL Server 存储过程的 Powershell 脚本 - 可能的超时问题
- c# - 在应用程序退出时等待任务
- android - 为什么在 Room 迁移中建议使用完整查询而不是引用常量?