JFrame在多个屏幕上的位置

时间:2014-04-23 11:38:02

标签: java swing graphics jframe multiscreen

我想在屏幕上确定JFrame的位置。当我使用getLocationOnScreen()getLocation()时,我只需 w1 + p ,但我想确定 p < / em>的

______________   __________
|            |   | p  ____|     
|            |   |<-> |__||
|____________|   |________|
<---  w1  --->   <-- w2 -->

使用getGraphicsConfiguration().getDevice().getDisplayMode().getWidth()返回w2什么都没问题,但我无法确定活动屏幕上的JFrames位置。

我的总体目标是确保JFrame永远不会有可见屏幕区域之外的区域。例如。如果将JFrame移出屏幕#2的可见区域100px,则将其向下移动100px进行校正。

如何在其活动屏幕上获取JFrame的位置,或以任何其他方式确保完整JFrame可见(假设`JFrame.size&lt; = Screen.size) ?

1 个答案:

答案 0 :(得分:0)

我自己找到了一个解决方案并将其记录为on my website。简而言之,这段代码对我有用:

public void moveToVisible(JFrame frame) {
    // Vertical position
    GraphicsDevice activeScreen = getGraphicsConfiguration().getDevice();
    if (frame.getLocation().y < 0) {
        frame.setLocation(getLocation().x, 0);
    }
    if ((frame.getLocation().y + frame.getHeight()) > 
            activeScreen.getDisplayMode().getHeight()) {
        frame.setLocation(
                frame.getLocation().x,
                (activeScreen.getDisplayMode().getHeight() 
                 - frame.getHeight())
        );
    }
    // Horizontal position
    int offsetRight = frame.getX() + frame.getWidth() - frame.getGraphicsConfiguration().getBounds().x + frame.getGraphicsConfiguration().getBounds().width;
    if (offsetRight > 0) {
        setLocation(frame.getX() - offsetRight, frame.getY());
    }
    int offsetLeft = frame.getX() - frame.getGraphicsConfiguration().getBounds().x;
    if (offsetLeft < 0) {
        frame.setLocation(frame.getX() - offsetLeft, frame.getY());
    }
}

如果有人知道更简单的解决方案,请告诉我:)