我在 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 中从罗盘位置(NORTH
、EAST
)更新, ...) 到更冗长的常量(PAGE_START
、PAGE_END
、LINE_START
、LINE_END
和 CENTER
)。因此,BorderLayout.WEST
的使用应替换为 BorderLayout.LINE_START
。 - 来自 How to use BorderLayout
关于java - 如何让嵌入式Jpanel走向WEST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68989058/