java - 如何让嵌入式Jpanel走向WEST

标签 java swing jpanel layout-manager

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

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

内容是应用的主要内容

内容侧边栏是内容内部的侧边栏,我使用它是为了让我的设置页面在正常侧边栏之外有自己的侧边栏。

我使侧边栏与 WEST 和内容中心对齐

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

关于java - 如何让嵌入式Jpanel走向WEST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68989058/

相关文章:

java - 致命异常 : main error - Android development

java - 从 Jersey 迁移到 spring-mvc/rest : ContainerRequestFilter, ContainerResponseFilter

java - 有没有办法用SecondaryTable实现多表跳转?

java - 在 Java 中移动椭圆形和椭圆形?

java - 通过行选择编辑jtable内容

Java Struts2 Action map 问题

Java重绘网格布局

java - Swing Scala 问题 - 面板 100% 扩展

java - 将一个 jpanel 替换为另一个 jpanel

java - 如何在JPanel内部绘画