Положение JFrame на нескольких экранах

1

Я хочу определить положение JFrame на экране. Когда я использую getLocationOnScreen() или getLocation() я просто получаю w1 + p но я хочу определить только p.

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

Использование getGraphicsConfiguration().getDevice().getDisplayMode().getWidth() возвращает w2 что отлично, но я не могу определить положение JFrames на активном экране.

Моя общая цель - обеспечить, чтобы у JFrame никогда не было области из видимой области экрана. Например, если JFrame перемещается 100px вверх из видимой области экрана # 2 ее исправить с перемещением вниз на 100px.

Как я могу получить позицию JFrame на его активном экране или убедитесь, что в любой другой форме, что полная JFrame видна (asuming "JFrame.size <= Screen.size)?

Теги:
graphics
swing
jframe
multiscreen

1 ответ

0
Лучший ответ

Я нашел решение самостоятельно и документировал его на своем веб-сайте. Короче говоря, этот код работает для меня:

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());
    }
}

Если кто-то знает более простое решение, дайте мне знать :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню