BorderLayout 方向

BorderLayout orientation

我正在尝试创建 window 的顶部按钮。当我尝试将带有按钮的面板添加到框架上的 JPanel 时,我有一个 JFrame 和一个带有不同按钮的 JPanel,它没有显示......挖掘并试图找到解决方案,我意识到问题是当我使用 BorderLayout 面板上的按钮将方向设置为面板时。我认为这可能是我没有意识到的愚蠢问题,但我还没有发现这样的问题。

设置方向时出现的问题:

contentPanel.add(buttons,BorderLayout.PAGE_START);

如果我删除:

BorderLayout.PAGE_START

有效

这是我的相框:

package view;

import javax.swing.JFrame;
import javax.swing.JPanel;

import java.awt.Color;
import java.awt.CardLayout;
import java.awt.BorderLayout;

public class MainFrame extends JFrame{
 private JPanel contentPanel, layOutPanel;
 private CardLayout mainCardLayout;
 private BorderLayout borderLayout;
 private static MainFrame instance = null;
 private FrameButtonsPanel buttons;

private MainFrame(){
 setSize(1000,700);
 //setUndecorated(true);
 setLocationRelativeTo(null);
 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


 contentPanel = new JPanel();
 borderLayout = new BorderLayout();
 contentPanel.setLayout(borderLayout);
 add(contentPanel);

 buttons = new FrameButtonsPanel();
 buttons.setBackground(Color.red);
 contentPanel.add(buttons,BorderLayout.PAGE_START);

 /*layOutPanel = new JPanel();
 mainCardLayout = new CardLayout();
 layOutPanel.setLayout(mainCardLayout);
 layOutPanel.setBackground(Color.red);
 contentPanel.add(layOutPanel,BorderLayout.SOUTH);*/
}

 public static MainFrame getInstance(){
  if (instance == null){
   instance = new MainFrame();
  }
  return instance;
 }

  public static void main(String[] args) {
   MainFrame.getInstance().setVisible(true);
  }
 }

这是我的带有按钮的面板:

package view;

import javax.swing.JPanel;
import javax.swing.SpringLayout;
import javax.swing.Spring;
import javax.swing.JButton;
import javax.swing.JFrame;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

 public class FrameButtonsPanel extends JPanel{
 private Spring spring;
 private JButton iconify, maximize, close;

  public FrameButtonsPanel(){
   SpringLayout mySpring = new SpringLayout();
   setLayout(mySpring);

  iconify = new JButton("-");
  add(iconify);
  maximize = new JButton("O");
  add(maximize);
  close = new JButton("X");
  add(close);

  spring = Spring.constant(850,850,2000);


mySpring.putConstraint(SpringLayout.WEST,iconify,spring,SpringLayout.WEST,this);
mySpring.putConstraint(SpringLayout.WEST,maximize,3,SpringLayout.EAST,iconify);
mySpring.putConstraint(SpringLayout.WEST,close,3,SpringLayout.EAST,maximize);
mySpring.putConstraint(SpringLayout.EAST,this,3,SpringLayout.EAST,close);

iconifyWindow();
maximizeWindow();
closeWindow();
}

 private void iconifyWindow(){
  iconify.addActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
        MainFrame.getInstance().setExtendedState(JFrame.ICONIFIED);
     }
   });
 }

 private void maximizeWindow(){
  maximize.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent arg0) {
    if(MainFrame.getInstance().getExtendedState() == JFrame.MAXIMIZED_BOTH){
        MainFrame.getInstance().setExtendedState(JFrame.NORMAL);
    }else{
        MainFrame.getInstance().setExtendedState(JFrame.MAXIMIZED_BOTH);
    }
        }
     });
  }

private void closeWindow(){
  close.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent arg0) {
            System.exit(0);
        }
    });
 }
}

我不知道你为什么要尝试使用 SpringLayout 来显示按钮。

只需使用右对齐 FlowLayoutJPanel

阅读 FlowLayout API 了解有关如何右对齐添加到面板的组件的更多信息。