如何让嵌入式Jpanel走向WEST

How to make embedded Jpanel go to WEST

我在 java swing 中创建了一个应用程序,并在其中制作了我认为称为嵌入式 Jpanel 的东西,根据我的理解,这是一个 jpanel 内部的 jpanel。为了使这更简单,我们将使用面板名称有内容、侧边栏和内容侧边栏

侧边栏只是带有按钮的应用程序的侧边栏

内容是应用的主要内容

内容侧边栏是内容内部的侧边栏,我使用它,所以我的设置页面除了普通侧边栏外还有自己的侧边栏。

我使侧边栏向西对齐,内容向中心对齐

content.add(contentSidebar, BorderLayout.WEST); 之后,它不会使内容侧边栏向西移动,我不确定为什么。

这是我的源代码

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
        }
    }
}

编辑

问题是我没有给内容边框布局

您调用了 content.add(contentSidePanel, BorderLayout.WEST),但是您从未将 content 的布局管理器设置为 BorderLayout。我相信 JPanel 的默认布局管理器是 FlowLayout,因此 BorderLayout.WEST 没有任何意义。

另一方面,您似乎只向 content 添加了一项 contentSidePanel。我相信 BorderLayout 会将 content 的大小设置为与 contentSidePanel 相同的大小,并且指定 BorderLayout.WEST 将无效,因为中心或东部没有任何东西。尝试将测试 JPanel 添加到 content 并将其布局设置为 BorderLayout.CENTER 以查看我是否正确。

注意: BorderLayout 的位置常量在 JDK 1.4 中从罗盘位置更新(NORTHEAST , ...) 到更冗长的常数(PAGE_STARTPAGE_ENDLINE_STARTLINE_ENDCENTER)。因此 BorderLayout.WEST 的使用应替换为 BorderLayout.LINE_START。 - 来自 How to use BorderLayout