Я хочу определить положение 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)?
Я нашел решение самостоятельно и документировал его на своем веб-сайте. Короче говоря, этот код работает для меня:
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());
}
}
Если кто-то знает более простое решение, дайте мне знать :)