Ich versuche herauszufinden, auf welchem meiner beiden Bildschirme sich ein JFrame befindet.Ruft die Bildschirmgeräteinformationen des Bildschirms ab, auf dem sich der JFrame gerade befindet
ich jede Hilfe dankbar;)
Ich versuche herauszufinden, auf welchem meiner beiden Bildschirme sich ein JFrame befindet.Ruft die Bildschirmgeräteinformationen des Bildschirms ab, auf dem sich der JFrame gerade befindet
ich jede Hilfe dankbar;)
Verwenden getLocation()
die Koordinaten der oberen linken Ecke des Rahmens zu erhalten. Basierend auf Ihrem Bildschirmlayout und der Auflösung müssen Sie berechnen, auf welchem Bildschirm es sich befindet.
Was auch hilfreich sein könnte, ist die gesamte Dimension der Bildschirm zu erhalten, indem diese mit:
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
Manchmal schätze ich die späteren Lösungen (geschrieben auch Jahre nach der Frage gestellt wurde). Dies ist meine komplexere Lösung des gleichen Problems (ursprünglich auf Basis von Oracle-Dokumentation) ...
Genießen ...
// 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;
Definition einer Hilfsklasse:
/**
* 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;
}
Definition des Verfahrens, das tut der Auftrag:
/**
* 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;
}
die Neudefinition des DeviceConfig
c Mädchen im Rahmen des null
Rückgabewert (in den Kommentaren oben erwähnt):
// ***
// 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 für alle Leser: Sie vereinfachen können (oder vorher) dieses Beispiel an Ihre Bedürfnisse anzupassen ...
(ich hoffe es hilft ... ;-))
danke viel kumpel! Das wird es tun! :) – mast