在Java中,空布局不显示边界布局

在Java中,空布局不显示边界布局,java,swing,layout-manager,border-layout,null-layout-manager,Java,Swing,Layout Manager,Border Layout,Null Layout Manager,今天的问候语,我有一个JFrame和一个名为panelMain的Jpanel。我所有的框架和面板设置都非常完美。我已将panelMain的布局设置为BorderLayout。我现在创建了另一个名为panel1的面板。panel1的布局为空。我在panel1中添加了一些按钮(它的布局为空)。然后我在panelMain的西面添加了panel1。当我运行程序时,panelMain出现了,但panel1没有出现。然后我将panel1的布局从null更改为FlowLayout,然后它出现在panelMai

今天的问候语,我有一个JFrame和一个名为panelMain的Jpanel。我所有的框架和面板设置都非常完美。我已将panelMain的布局设置为BorderLayout。我现在创建了另一个名为panel1的面板。panel1的布局为空。我在panel1中添加了一些按钮(它的布局为空)。然后我在panelMain的西面添加了panel1。当我运行程序时,panelMain出现了,但panel1没有出现。然后我将panel1的布局从null更改为FlowLayout,然后它出现在panelMain的西侧。我不知道在使用BorderLayout时,空布局面临什么问题,有人能帮我解决吗

JPanel panelMain = new JPanel();
JPanel panelWEST = new JPanel();
JButton button = new JButton();
JButton button2 = new JButton();
Constructor(){
    setContentPane(panelMain);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setExtendedState(Frame.MAXIMIZED_BOTH);

    panelMain.setLayout(new BorderLayout());
    panelMain.setBackground(Color.CYAN);

    panelWEST.setLayout(null);
   

    button.setBounds(50,50,200,200);
    button.setText("West Button1");
    button2.setBounds(50,300,200,200);
    button2.setText("West Button2");
    panelWEST.setBackground(Color.PINK);
    panelWEST.add(button);
    panelWEST.add(button2);

    panelMain.add(panelWEST,BorderLayout.WEST);
    

不要使用空布局!!!Swing设计用于布局管理器

使用随机数从来都不是一个好主意,这正是您在尝试猜测组件大小时所做的

每个回转组件都有责任确定自己的首选尺寸。布局管理器然后使用此信息设置添加到配电盘的构件的尺寸/位置。如果使用空布局,则会丢失此功能

作为解决方案,您可以执行以下操作:

JPanel buttonPanel = new JPanel( new GridLyaout( 0, 1) );
buttonPanel.add(button1);
buttonPanel.add(button2);

JPanel west = new JPanel( new BorderLayout() );
west.add(buttonPanel, BorderLayout.PAGE_START);

panelMain.add(west, BorderLayout.LINE_START);
如果要在按钮面板的左侧留出空间,则可以使用
EmptyBorder
。阅读工作示例。以下各部分包括:

  • 如何使用边框
  • 布局管理器的可视化指南

  • 哇,堆栈溢出让我很困惑。一周前,一个家伙告诉我永远不要使用布局管理器,他告诉我使用布局管理器总是一种不好的做法,你应该总是使用空布局,现在我得到了相反的反馈,有人能帮我解决一下我是否应该使用空布局。@Meetprakashsha你最后一个问题的答案是:这是一种不好的做法。一个非常糟糕的界面。参考使用空布局和setBounds()方法。然后继续说:通过使用布局管理器,您可以轻松解决此类问题,答案是您不应该尝试自由定位组件。您应该使用布局管理器在框架上逻辑定位零部件。请重新阅读整个答案。Camickr,你能帮助我如何使用布局管理器在特定位置安排组件吗?谢谢您的帮助。您不使用特定的位置。这是这个答案和上一个答案的重点。您的原始代码试图在框架的左侧垂直显示两个按钮。我给你举了一个例子,说明如何在6行代码中使用布局管理器,而不使用任何幻数。布局管理器会设置位置,这样您就不需要这样做。我提供的代码如何解决不了您的问题?您提供的代码非常完美,但我认为我需要更多地研究布局管理器,谢谢