Home > Enterprise >  How to make embedded Jpanel go to WEST
How to make embedded Jpanel go to WEST

Time:09-17

Im creating an application in java swing and in it Im making what I think is called an embedded Jpanel which is to my understanding a jpanel inside a jpanel. To make this simpler we will use the panel names there is content, sidebar, and content sidebar

Sidebar is just the sidebar for the application with buttons

Content is the main content of the app

Content sidebar is a side bar inside of content, I use this so my settings page has its own side bar apart from the normal side bar.

I make sidebar aligned to WEST and content CENTER

after content.add(contentSidebar, BorderLayout.WEST); it won't make content sidebar go to west and im not sure why.

this is my source code

package Assets.Settings;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Security implements ActionListener{
    JFrame Security;
    JPanel sideBar;
    JPanel content;

    //for sidebar
    JButton volume;
    JButton security;
    JButton contactUs;

    JPanel contentSidePanel;
//    JButton twoStep;
//    JButton changePassword;


    public void security(){
        Security = new JFrame();
        sideBar = new JPanel();
        content = new JPanel();

        contentSidePanel = new JPanel();

        sideBar.setPreferredSize(new Dimension(125, 700));
        content.setPreferredSize(new Dimension(1000, 700));

        content.setBackground(Color.YELLOW);

        Security.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        Security.setTitle("Anonyomail Security Settings");
        Security.setSize(1152, 700);
        Security.setLayout(new java.awt.BorderLayout());

        contentSidePanel.setLayout( new java.awt.BorderLayout());

        volume = new JButton();
        security = new JButton();
        contactUs = new JButton();

//        twoStep = new JButton();
//        changePassword = new JButton();

        volume.addActionListener(this);
        contactUs.addActionListener(this);

        volume.setText("Volume");
        security.setText("Security");
        contactUs.setText("Contact Us");

//        changePassword.setText("Change Password");
//        twoStep.setText("2-Step");

        security.setBackground(Color.decode("#24a0ed"));

        



        contentSidePanel.setPreferredSize(new Dimension(100, 700));

        contentSidePanel.setBackground(Color.BLACK);

//        contentSidePanel.add(changePassword);
//        contentSidePanel.add(twoStep);

        content.add(contentSidePanel, BorderLayout.WEST);

        sideBar.add(volume);
        sideBar.add(security);
        sideBar.add(contactUs);


        Security.add(sideBar, BorderLayout.WEST);
        Security.add(content, BorderLayout.CENTER);

        Security.pack();
        Security.setVisible(true);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource() == volume){
            //open volume
        }else if(e.getSource() == contactUs){
            //open contact us
        }
    }
}

EDIT

The issue is that I didn't give content a border layout

CodePudding user response:

You call content.add(contentSidePanel, BorderLayout.WEST) however you never set content's layout manager to BorderLayout. I believe JPanel's default layout manager is FlowLayout and thus BorderLayout.WEST implies nothing.

On another note, it seems like you're only adding one thing, contentSidePanel, to content. I believe that BorderLayout will size content to the same size as contentSidePanel and that specifying BorderLayout.WEST will have no effect since there is nothing in the center or to the east. Try adding a test JPanel to content and setting it's layout to BorderLayout.CENTER to see if I'm correct.

Note: BorderLayout's position constants where updated in JDK 1.4 from compass positions (NORTH, EAST, ...) to wordier constants (PAGE_START, PAGE_END, LINE_START, LINE_END and CENTER). Therefor the use of BorderLayout.WEST should be replaced with BorderLayout.LINE_START. - from How to use BorderLayout

  • Related