Position on Screen Right Bottom

18,645

Solution 1

Try the example below. Note how pack() "Causes this Window to be sized to fit the preferred size and layouts of its subcomponents."

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

Solution 2

The easiest way I know is to nest JPanels each using its own layout manager.

  • The main JPanel would use a BorderLayout
  • Another JPanel that is added to the main at BorderLayout.SOUTH position also uses BorderLayout.
  • the component that needs to go at the SE corner is added to the above JPanel at the BorderLayout.EAST position.
  • In general, you're almost always better off using layout managers vs. trying to set absolute position of components.
Share:
18,645
Isuru
Author by

Isuru

Android App Developer with Java.

Updated on June 17, 2022

Comments

  • Isuru
    Isuru about 2 years

    I need to position JFrame on my screen. But I can't make them appear on the right side of the screen bottom.

    Please can someone explain me how to position them, if you can describe how to do it, it would be great.

    Here is the code so far.

        //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);
    
  • Isuru
    Isuru over 12 years
    yeah! I want to set JFrame. Sorry for misunderstanding! But thanks for trying Pal!
  • nIcE cOw
    nIcE cOw over 12 years
    Just a point of advice for referring to BorderLayout.SOUTH and BorderLayout.EAST, when we must be using BorderLayout.PAGE_END and BorderLayout.LINE_START respectively, for jdk 1.4+, as referred by BorderLayout Tutorials :-)