Question

I am trying to setup my JPanel's position to the right using i.add(jp, BorderLayout.EAST); but it is not working. Any ideas why? Thanks for the help in advance.

/* INSTANCE DECLARATIONS */
private JTextField tf;//text field instance variable
private JLabel jl2;//label instance variable


/*****************
 * WINDOW METHOD *
 * ***************/
public void window() {

    LoadImageApp i = new LoadImageApp();//calling image class

    JFrame gameFrame = new JFrame();//declaration
    JPanel jp = new JPanel();
    JLabel jl = new JLabel("Enter a Letter:");//prompt with label

    tf = new JTextField(1);//length of text field by character
    jl2 = new JLabel("Letters Used:    ");

    jp.add(jl);//add label to panel
    jp.add(tf);//add text field to panel
    jp.add(jl2);//add letters used

    gameFrame.add(i); //adds background image to window
    i.add(jp, BorderLayout.EAST); // adds panel containing label to background image panel

    gameFrame.setTitle("Hangman");//title of frame window
    gameFrame.setSize(850, 600);//sets size of frame
    gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//exit when 'x' button pressed
    gameFrame.setIconImage(new ImageIcon("Hangman-Game-grey.png").getImage());//set the frame icon to an image loaded from a file
    gameFrame.setLocationRelativeTo(null);//window centered
    gameFrame.setResizable(false);//user can not resize window
    gameFrame.setVisible(true);//display frame


 }//end window method
Was it helpful?

Solution

What layout manager does i, your LoadImageApp instance, use? I'm betting it's not BorderLayout. I'm betting that the LoadImageApp class extends JPanel and if so and if you never explicitly set its layout, then it uses a FlowLayout by default, and as you're finding out, FlowLayout doesn't respect the BorderLayout.EAST int constant.

The solution is likely quite simple: make it use a BorderLayout:

setLayout(new BorderLayout());

Edit
You state in comment:

When I set the border layout of i to EAST, my background image shifts to the right also, is there a way to get around that?

No, you're missing the point. You need to set the layout of LoadImageApp to BorderLayout. You're not supposed to add i BorderLayout.EAST. This was never recommended to you.

i.e.,

public class LoadImageApp extends JPanel {

  // in the constructor
  public LoadImageApp() {
    setLayout(new BorderLayout());
  }

  // .... etc....
}

THe LoadImageApp instance (which I would name loadImageApp, not i), should be added BorderLayout.CENTER, which you were doing before. Please read the layout manager tutorials which you can find here.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top