【问题标题】:How to get the display size and not the screen size? [closed]如何获得显示尺寸而不是屏幕尺寸? [关闭]
【发布时间】:2020-10-26 16:07:00
【问题描述】:

我搜索了互联网和 StackOverflow 并找到了很多获取当前屏幕尺寸的方法,但是
屏幕尺寸不是显示尺寸,有没有办法获取显示尺寸而不是屏幕尺寸?

我目前正在使用以下代码行来获取屏幕尺寸:

//size of the screen
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();

frame.setUndecorated(true);
frame.setAlwaysOnTop(true);
frame.setVisible(true);
frame.add(panel);

//get screensize
int height = (int) screenSize.getSize().getHeight();
int width = (int) screenSize.getSize().getWidth();
System.out.println("Current system width & height: " + screenSize.width + ", " + screenSize.height);
frame.setSize(width, height);

有人知道获取显示尺寸的方法吗?还是真的不可能?

【问题讨论】:

  • 大多数人认为屏幕尺寸是显示尺寸的同义词。当您使用这些术语时,您究竟是什么意思?对你有什么不同?
  • 还有,你为什么在乎。您要解决的要求是什么。如果您认为您需要知道“显示”尺寸,那么您可能正在错误地接近解决方案。
  • 最后一行表明您正在尝试将框架设置为全屏。如果那是您的意图,请查看stackoverflow.com/questions/11570356/jframe-in-full-screen-java
  • 我想区分但听起来很荒谬。我创建了一个全屏的jframe,现在我想在右上角放置一个按钮,所以我需要我的屏幕尺寸来确定我需要向右移动多少但是当我使用这种方法时,它在我的电视上显示正确但是不在我的笔记本电脑屏幕上。我知道这听起来很愚蠢,我还在学习。
  • 这听起来一点也不愚蠢。我确实相信这是XY-Problem。为了将组件放在框架的右上角,您不需要知道框架的大小,您的布局管理器会为您完成。你可以例如将BorderLayout 添加到您的框架中,将所有当前组件放入中心,然后在北部分添加另一个具有右对齐FlowLayout 的面板。右上角会出现一个按钮。

标签: java swing jframe screen-size


【解决方案1】:

我想在右上角放一个按钮

这正是我询问您的实际要求,而不是您尝试的解决方案的原因。您尝试的解决方案是错误的。

  1. 不要使用空布局。 Swing 旨在与布局管理器一起使用。 JFrame 的默认布局管理器是BorderLayout。因此,您可以创建一个 JPanel 并使用右对齐的 FlowLayout(阅读 API 以获取正确的构造函数。然后将按钮添加到面板,并将面板添加到框架中。

所以要在顶部/右侧添加一个组件,基本逻辑是:

JButton button = new JButton(...);
JPanel top = new JPanel( new FlowLayout(...) );
top.add(button);
frame.add(top, BorderLayout.PAGE_START);

阅读Layout Managers 上的 Swing 教程,了解更多信息和使用布局管理器的示例。

  1. 不要使用 setSize() 方法。通常,您将在将所有组件添加到框架之后使用pack() 方法,并且框架将根据添加到框架中的所有组件的首选大小自行调整大小。

但是在这种情况下,您希望框架最大化,您可以使用:

frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setVisible(true);

将所有组件添加到框架之后。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2015-02-28
    相关资源
    最近更新 更多