Я хочу вставить панель в jframe одним нажатием кнопки

#java

#java

Вопрос:

 import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Button extends JButton{
    Button(){}
    Button(String text,ImageIcon icon,Dimension dm,Point point){
    this.setText(text);
    this.setIcon(icon);
    this.setSize(dm);
    this.setBorder(BorderFactory.createLineBorder(Color.WHITE));
    this.setHorizontalTextPosition(SwingConstants.RIGHT);
    this.setIconTextGap(50);
    this.setFont(new Font(null, Font.PLAIN, 14));
    this.setFocusable(false);
    this.setLocation(point);
    this.setBackground(null);
    }
}

class MenuPanel extends JPanel implements ActionListener{

    public MenuPanel(int width,int height,Color color){
        bDimension = new Dimension(196,40);
        addIcon =new ImageIcon(getClass().getResource("addUser.png"));
        editIcon =new ImageIcon(getClass().getResource("editUser.png"));

        this.setLayout(null);
        this.setPreferredSize(new Dimension(width,height));
        this.setBackground(color);

        //THE LOGO
        this.add(new LogoPanel(new Dimension(196, 150), this.getBackground(),new Point(2, 2)));

        //THE ADD BUTTON
        btnAdd =new Button("Add User",addIcon,bDimension,new Point(2,this.getComponent(0).getHeight() 4));
        btnAdd.addActionListener`enter code here`(this);
        this.add(btnAdd);


        //THE EDIT BUTTON
        btnEdit =new Button("Edit User",editIcon,bDimension,new Point(2,this.getComponent(0).getHeight() this.getComponent(1).getHeight() 8));
        btnEdit.addActionListener(this);
        this.add(btnEdit);
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if(e.getSource()==btnAdd) {
            JPanel addUser =new JPanel();
            addUser.setBackground(Color.BLUE);
            addUser.setPreferredSize(new Dimension(400,100));
            addUser.add(new JButton("Button"));

            //NOT SURE WHAT I'M DOING HERE. DOESN'T WORK
            this.getParent().add(addUser,BorderLayout.CENTER);


        }else if(e.getSource()==btnEdit) {
            JPanel editUser =new JPanel();
            editUser.setBackground(Color.RED);
            editUser.setPreferredSize(new Dimension(400,100));
            editUser.add(new JButton("Button"));

            //NOT SURE WHAT I'M DOING HERE. DOESN'T WORK
            this.getParent().add(editUser,BorderLayout.CENTER);
        }
    }

    private Button btnAdd;
    private Button btnEdit;
    private ImageIcon addIcon;
    private ImageIcon editIcon;
    private Dimension bDimension;
}


class LogoPanel extends JPanel{
    public LogoPanel(Dimension dimension,Color color,Point point){
        btnLogo =new JLabel();
        btnLogo.setText("Your Name");
        btnLogo.setIcon(new ImageIcon(getClass().getResource("user.png")));
        btnLogo.setOpaque(true);
        btnLogo.setIconTextGap(10);
        btnLogo.setHorizontalTextPosition(0);
        btnLogo.setVerticalTextPosition(3);
        btnLogo.setHorizontalAlignment(0);
        btnLogo.setVerticalAlignment(0);

        this.setLayout(new BorderLayout());
        this.setBorder(BorderFactory.createLineBorder(Color.WHITE));
        this.setSize(dimension);
        this.setBackground(color);
        this.add(btnLogo,BorderLayout.CENTER);
        this.getComponent(0).setFont(new Font(null, Font.PLAIN, 14));
        this.getComponent(0).setFocusable(false);
        this.setLocation(point);
    }
    JLabel btnLogo;
}

public class Window extends JFrame {
    public Window(){
        this.setTitle(null);
        this.setIconImage(null);
        this.setLayout(new BorderLayout(0,2));
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setPreferredSize(new Dimension(new Dimension(960,500)));
        this.setMinimumSize(new Dimension(960,500));
        this.getContentPane().setBackground(new Color(250, 250, 250));

        //ADD PANELS
        this.add(new MenuPanel(200, 0, new Color(238, 238, 238)),BorderLayout.WEST);

        this.setLocationRelativeTo(null);
    }
} 
 

Приведенный выше код создает jframe с borderlayout и панелью меню, выровненной по западу. Панель меню имеет
две кнопки jbuttons.
Чего я хочу добиться, так это нажать любую из кнопок и тем самым вставить панель на другую сторону jframe.
Не могли бы вы, кто-нибудь, пожалуйста, помочь / научить меня, как этого добиться. Я очень новичок в программировании и особенно в Java.

Комментарии:

1. 1) Не используйте «кнопку», которая является компонентом AWT. Для Swing вы используете JButton . 2) Не используйте нулевой макет. Swing был разработан для использования с менеджерами компоновки. Таким образом, вы должны создать панель для кнопки, которую вы добавляете в WEST BorderLayout. Затем вы должны создать вторую панель, которая использует a CardLayout , которую вы добавляете в CENTER BorderLayout. Затем вы можете поменять панели местами. Прочитайте раздел из руководства по Swing о том, как использовать CardLayout для рабочего примера, чтобы начать работу.

2. @camickr, кнопка над ней фактически является классом, который расширяет JButton. Не уверен, что это может вызвать путаницу.

3. Пропустил это, и да, это сбивает с толку. У AWT и JavaFX есть классы, называемые Button . Имя класса должно быть более описательным, если вы настраиваете.