1

JFrame画面上の a の位置を特定したい。を使用するgetLocationOnScreen()か、 +getLocation()を取得するだけですが、 だけを決定したい場合。w1pp

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

使用しても問題はありませんが、getGraphicsConfiguration().getDevice().getDisplayMode().getWidth()アクティブな画面上w2の位置を特定できません。JFrames

私の全体的な目標はJFrame、目に見える画面領域の外に決して領域がないようにすることです。たとえば、JFrameが画面 #2 の可視領域から 100 ピクセル上に移動した場合、100 ピクセル下に移動して修正されます。

アクティブな画面で a の位置を取得するにはどうすればよいですJFrameか、または他の方法で完全JFrameに表示されることを確認できますか (`JFrame.size <= Screen.size と仮定して)?

4

1 に答える 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());
    }
}

誰かがより簡単な解決策を知っているなら、私に知らせてください:)

于 2014-04-23T19:15:27.150 に答える