gpt4 book ai didi

java - 获取JFrame当前所在显示器的屏幕设备信息

转载 作者:行者123 更新时间:2023-11-30 09:52:02 25 4
gpt4 key购买 nike

我试图找出 JFrame 在我的两个显示器中的哪一个上。

感谢任何帮助;)

最佳答案

有时我很欣赏后来的解决方案(甚至在问题被问到几年后才发布)。这是我对同一问题的更复杂的解决方案(最初基于 Oracle 文档)...

享受……

// First some imports (it could spare your time)…
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.Window;

辅助类的定义:

/**
* This class just stores indexes and instances of a graphics device and
* one of its configurations (within current graphics environment).
*/
public class DeviceConfig
{
public int deviceIndex = 0;
public int configIndex = 0;
public GraphicsDevice device = null;
public GraphicsConfiguration config = null;
}

完成工作的方法的定义:

/**
* This method finds the graphics device and configuration by the location
* of specified window.
*
* @param window the window for which should be the identified the graphics
* device and configuration
* @return instance of custom class type (DeviceConfig) that stores the
* indexes and instances of graphics device and configuration of
* current graphics environment
*/
public DeviceConfig findDeviceConfig(Window window)
{
// Prepare default return value:
DeviceConfig deviceConfig = new DeviceConfig();

// More correct would be to return null when no device or configuration
// has been found:
//
// DeviceConfig deviceConfig = null;
//
// See also the comments marked by *** (below).

Rectangle windowBounds = window.getBounds();
int lastArea = 0;

GraphicsEnvironment graphicsEnvironment =
GraphicsEnvironment.getLocalGraphicsEnvironment();

GraphicsDevice[] graphicsDevices =
graphicsEnvironment.getScreenDevices();

// Search through all devices…
for (int i = 0; i < graphicsDevices.length; ++i)
{
GraphicsDevice graphicsDevice = graphicsDevices[i];

GraphicsConfiguration[] graphicsConfigurations =
graphicsDevice.getConfigurations();

// It is possible that your device will have only one configuration,
// but you cannot rely on this(!)…
for (int j = 0; j < graphicsConfigurations.length; ++j)
{
GraphicsConfiguration graphicsConfiguration =
graphicsConfigurations[j];

Rectangle graphicsBounds =
graphicsConfiguration.getBounds();

Rectangle intersection = windowBounds.
intersection(graphicsBounds);

int area = intersection.width * intersection.height;

if (0 != area)
{
// ***
// The block of code in this comments is relevant in case you
// want to return the null value when no device or
// configuration has been found.
/*
if (null == deviceConfig)
{
// In this case the better solution would be to declare
// the full constructor in the DeviceClass (see below) and
// use it here like this:

deviceConfig = new DeviceConfig(i, j,
graphicsDevice, graphicsConfiguration);

// (but the current solution is more simple when no
// constructor is defined)…

}
else
*/

if (area > lastArea)
{
lastArea = area;
deviceConfig.deviceIndex = i;
deviceConfig.configIndex = j;
deviceConfig.device = graphicsDevice;
deviceConfig.config = graphicsConfiguration;
}
}
}
}

return deviceConfig;
}

DeviceConfig 类在null 返回值的上下文中的重新定义(在上面的注释中提到):

// ***
// The DeviceConfig class with constructors would look like this:

public class DeviceConfig
{
public int deviceIndex;
public int configIndex;
public GraphicsDevice device;
public GraphicsConfiguration config;

/** The default constructor. (Would not be used in the second case.) */
public DeviceConfig()
{
deviceIndex = 0;
configIndex = 0;
device = null;
config = null;
}

/** The full constructor. */
public DeviceConfig(int i, int j,
GraphicsDevice graphicsDevice,
GraphicsConfiguration graphicsConfiguration)
{
deviceIndex = i;
configIndex = j;
device = graphicsDevice;
config = graphicsConfiguration;
}
}

为所有读者发布 Scriptum:您可以简化(或改进)此示例以满足您的需要……

(希望对您有所帮助……;-))

关于java - 获取JFrame当前所在显示器的屏幕设备信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4388013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com