Положение на экране справа внизу

Мне нужно разместить JFrame на моем экране. Но я не могу заставить их появиться в правой части экрана.

Пожалуйста, объясните мне, как их расположить, если вы можете описать, как это сделать, было бы здорово.

Вот код на данный момент.

    //Gets the screen size and positions the frame left bottom of the screen
    GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
    GraphicsDevice defaultScreen = ge.getDefaultScreenDevice();
    Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds();
    int x = (int)rect.getMinX();
    int y = (int)rect.getMaxY()- frame.getHeight();
    frame.setLocation(x ,y - 45);

person Isuru    schedule 17.03.2012    source источник
comment
Некоторые платформы ограничивают это, как упоминалось здесь.   -  person trashgod    schedule 18.03.2012


Ответы (2)


Попробуйте приведенный ниже пример. Обратите внимание, как pack() "Заставляет Window быть размером, чтобы соответствовать предпочтительному размеру и макету его подкомпонентов."

import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import javax.swing.JFrame;
import javax.swing.JPanel;

/** @see http://stackoverflow.com/q/9753722/230513 */
public class LowerRightFrame {

    private void display() {
        JFrame f = new JFrame("LowerRightFrame");
        f.add(new JPanel() {

            @Override // placeholder for actual content
            public Dimension getPreferredSize() {
                return new Dimension(320, 240);
            }

        });
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice defaultScreen = ge.getDefaultScreenDevice();
        Rectangle rect = defaultScreen.getDefaultConfiguration().getBounds();
        int x = (int) rect.getMaxX() - f.getWidth();
        int y = (int) rect.getMaxY() - f.getHeight();
        f.setLocation(x, y);
        f.setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new LowerRightFrame().display();
            }
        });
    }
}
person trashgod    schedule 18.03.2012

Самый простой способ, который я знаю, - это вложить каждую JPanel с помощью собственного менеджера компоновки.

  • Основной JPanel будет использовать BorderLayout
  • Другой JPanel, который добавляется к основному в позиции BorderLayout.SOUTH, также использует BorderLayout.
  • компонент, который должен находиться в углу SE, добавляется в указанную выше панель JPanel в позиции BorderLayout.EAST.
  • В общем, вам почти всегда лучше использовать менеджеры по расположению, чем пытаться установить абсолютное положение компонентов.
person Hovercraft Full Of Eels    schedule 17.03.2012
comment
Ага! Я хочу установить JFrame. Простите за недопонимание! Но спасибо, что попробовал, Пал! - person Isuru; 18.03.2012
comment
Просто совет для обращения к BorderLayout.SOUTH и BorderLayout.EAST, когда мы должны использовать BorderLayout.PAGE_END и BorderLayout.LINE_START соответственно для jdk 1.4+, как указано в Руководства по BorderLayout :-) - person nIcE cOw; 18.03.2012