如何使用 java 中另一个类的另一个面板更改面板的内容

how to change the content of a panel using another panel from another classe in java

在 Eclipse 上,使用 JFrames,我使用 mainFrame 作为主要用户界面,在那个框架中我有一个包含一个小面板(还有 JPanel)的 contentPanel (JPanel),在那个面板下面有一个按钮,我还有另一个 class ,我将其命名为 'clients' (另一个框架)也包含一个 contentPanel (JPanel)和其他组件,我想让第二个 class contentPanel 显示在第一个中面板(我提到的小面板)。 这就是我所做的,但它不起作用!有帮助吗?

MainF.java

public class mainF extends JFrame {

    private JPanel contentPane;
    public JPanel panel;
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    mainF frame = new mainF();
                    frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }

    /**
     * Create the frame.
     */
    public mainF() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 404);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(null);

        panel = new JPanel();
        panel.setBounds(10, 11, 414, 256);
        contentPane.add(panel);
        panel.setLayout(null);

        JLabel Panel = new JLabel("Main Panel");
        Panel.setHorizontalAlignment(SwingConstants.CENTER);
        Panel.setBounds(10, 11, 69, 33);
        panel.add(Panel);


        JButton btnClients = new JButton("Clients");
        btnClients.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                panel = new Clients().getContentPane();
                panel.setVisible(true);
            }
        });
        btnClients.setBounds(162, 296, 89, 23);
        contentPane.add(btnClients);
    }

}

客户

public class Clients extends JFrame {
private JPanel contentPane;

public JPanel getContentPane() {
    return contentPane;
}

public Clients() {
    contentPane = new JPanel();
    contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
    setContentPane(contentPane);
    contentPane.setLayout(null);

    JLabel lblClients = new JLabel("Clients");
    lblClients.setHorizontalAlignment(SwingConstants.CENTER);
    lblClients.setFont(new Font("Times New Roman", Font.BOLD, 18));
    lblClients.setBounds(10, 11, 85, 37);
    contentPane.add(lblClients);
}
}

谢谢大家!!

这里有一张图片来说明情况:

See the image here
您正在使用一个 JPanel 引用 panel,并使用它创建 2 个不同的面板对象。因此,首先从 contentPane 中删除 panel,然后使用新的初始化将其添加回来。

    public void actionPerformed(ActionEvent e) {
     contentPane.remove(panel);
     panel = new Clients().getContentPane();
     panel.setVisible(true);
     contentPane.add(panel);
     contentPane.repaint();
     contentPane.revalidate();

     }
   }); 

您还需要 contentpanerevalidate()repaint()