我正试图找出我的两个显示器中的哪一个是JFrame。
我感谢任何帮助;)
答案 0 :(得分:1)
使用getLocation()
获取框架左上角的坐标。根据您的屏幕布局和分辨率,您必须计算它所在的屏幕。
使用此功能可以获得屏幕的总维度:
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
答案 1 :(得分:1)
有时候我会欣赏后来的解决方案(甚至在提出问题后几年发布)。这是我对同一问题的更复杂的解决方案(最初基于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;
}
}
为所有读者提供Post Scriptum:您可以简化(或推进)此示例以满足您的需求......
(我希望它有帮助... ;-))