Как добавить и удалить компоненты из определенных координат в GridBagLayout? - PullRequest
0 голосов
/ 27 июня 2019

Я новичок в качелях, пытаюсь создать форму, в которой вы можете переходить к различным панелям нажатием кнопок слева, чтобы заполнить формы (панели), появляющиеся справа,и я использую GridBagLayout для этой цели.Я пытаюсь удалить текущую панель по щелчку JButton, а затем добавить соответствующие панели, которые я создал, расширяя JPanel для классов.Например, если я нажимаю на кнопку accountDetails, я хочу открыть панель accountDetails, что-то вроде переключения вкладок.Я хочу заменить любую панель, открытую в этой позиции, на панель accountDetails, и, поскольку любая вкладка может быть открыта, мне нужно заменить панель на основе координат вместо имени компонента.Я не знаю, как это сделать, поскольку я хочу удалять и добавлять компоненты на основе координат в кадре, а имя компонентов может быть неизвестно.Вот кодЗаранее большое спасибо!

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

public class FormWindow {
    private CustomerProfile customerProfile;
    private AccountDetails accountDetails;
    private LoanDetails loanDetails;
    private DocumentUpload documentUpload;
    private JPanel mainPanel;
    private JLabel logo;
    private JButton customerProfileButton;
    private JButton accountDetailsButton;
    private JButton loanDetailsButton;
    private JButton documentUploadButton;
    private JPanel bufferPanel;

    public static void main(String[] args) {
        JFrame frame = new JFrame("FormWindow");
        frame.setContentPane(new FormWindow().mainPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }


    FormWindow() {
        mainPanel = new JPanel();
        bufferPanel = new JPanel();
        mainPanel.setLayout(new GridBagLayout());
        customerProfile = new CustomerProfile();
        accountDetails = new AccountDetails();
        loanDetails = new LoanDetails();
        documentUpload = new DocumentUpload();
//        fieldForm.setLayout(new GridBagLayout());
        GridBagConstraints gbc;
        gbc = new GridBagConstraints();
        gbc.gridx = 1;
        gbc.gridy = 0;
        gbc.gridheight = 5;
        gbc.fill = GridBagConstraints.BOTH;
        bufferPanel.add(customerProfile);
        mainPanel.add(bufferPanel, gbc);
        final GridBagConstraints gbcForms = gbc;

        logo = new JLabel();
        logo.setText("LOGO");
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 0;
        gbc.insets = new Insets(5, 5, 10, 5);
        mainPanel.add(logo, gbc);

        customerProfileButton = new JButton();
        customerProfileButton.setText("Customer Profile");
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 1;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(5, 5, 5, 5);
        mainPanel.add(customerProfileButton, gbc);

        accountDetailsButton = new JButton();
        accountDetailsButton.setText("Account Details");
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 2;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(5, 5, 5, 5);
        mainPanel.add(accountDetailsButton, gbc);

        loanDetailsButton = new JButton();
        loanDetailsButton.setText("Loan Details");
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 3;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(5, 5, 5, 5);
        mainPanel.add(loanDetailsButton, gbc);

        documentUploadButton = new JButton();
        documentUploadButton.setText("Document Upload");
        gbc = new GridBagConstraints();
        gbc.gridx = 0;
        gbc.gridy = 4;
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.insets = new Insets(5, 5, 5, 5);
        mainPanel.add(documentUploadButton, gbc);

        //adding action listeners to buttons
        customerProfileButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {

            }
        });

        accountDetailsButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {

            }
        });

        loanDetailsButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {

            }
        });

        documentUploadButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ae) {

            }
        });
    }

}

Я хочу отобразить соответствующую панель в правой части рамки при нажатии соответствующей кнопки.Например, если я щелкаю accountDetailsButton, я хочу заменить ранее видимую панель панелью accountDetails (код для accountDetails имеет класс accountDetails, расширяющий JPanel).Это сделано для того, чтобы почувствовать переключение между вкладками.

...