我想在屏幕上确定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) ?
答案 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());
}
}
如果有人知道更简单的解决方案,请告诉我:)