如何用JButton打开一个新的JPanel?

时间:2017-07-21 14:05:46

标签: java eclipse user-interface jpanel windowbuilder

我正在尝试使用多个屏幕编写程序,但是,我不想使用选项卡式窗格。我已经看过使用多个JPanels卡片布局,方法根本不起作用。我需要做的是在单击按钮时加载新的JPanel。这是我的代码:

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import java.awt.CardLayout;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class IA extends JFrame {

    private JPanel contentPane;
    private JPanel home;
    private JPanel clients;

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

    /**
     * Create the frame.
     */
    public IA() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new CardLayout(0, 0));

        JPanel home = new JPanel();
        contentPane.add(home, "name_714429679706141");
        home.setLayout(null);

        JButton btnClients = new JButton("Clients");
        btnClients.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                home.setVisible(false);
                clients.setVisible(true);
            }
        });
        btnClients.setBounds(160, 108, 89, 23);
        home.add(btnClients);

        JPanel clients = new JPanel();
        contentPane.add(clients, "name_714431450350356");
        clients.setLayout(null);

        JButton btnHome = new JButton("Home");
        btnHome.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                clients.setVisible(false);
                home.setVisible(true);
            }
        });
        btnHome.setBounds(169, 107, 89, 23);
        clients.add(btnHome);
    }

}

3 个答案:

答案 0 :(得分:0)

我会看一下这篇文章,不过我觉得你需要使用actionlistener才能完成这个任务...... Java Swing. Opening a new JPanel from a JButton and making the buttons pretty 我会留下这个评论,但显然你需要50个代表......

此链接可能更有用.. How to open a new window by clicking a button

答案 1 :(得分:0)

问题是您有重复的变量homeclients

以下是您修改过的修改后的代码,其中包含对已更改行的注释(总共五行):

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

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class IA extends JFrame {

    private final JPanel contentPane;
    //   private final JPanel home;  // REMOVED
    //   private JPanel clients;  // REMOVED

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

    /**
     * Create the frame.
     */
    public IA() {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setBounds(100, 100, 450, 300);
        contentPane = new JPanel();
        contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
        setContentPane(contentPane);
        contentPane.setLayout(new CardLayout(0, 0));

        final JPanel home = new JPanel();
        contentPane.add(home, "name_714429679706141");
        home.setLayout(null);

        final JPanel clients = new JPanel();  // MOVED UP
        contentPane.add(clients, "name_714431450350356");  // MOVED UP
        clients.setLayout(null);  // MOVED UP

        JButton btnClients = new JButton("Clients");
        btnClients.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                home.setVisible(false);
                clients.setVisible(true);
            }
        });
        btnClients.setBounds(160, 108, 89, 23);
        home.add(btnClients);

        JButton btnHome = new JButton("Home");
        btnHome.addActionListener(new ActionListener() {
            public void actionPerformed(final ActionEvent e) {
                clients.setVisible(false);
                home.setVisible(true);
            }
        });
        btnHome.setBounds(169, 107, 89, 23);
        clients.add(btnHome);
    }

}

答案 2 :(得分:0)

调用以下代码时,clients变量等于null。

JButton btnClients = new JButton("Clients");
btnClients.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
        home.setVisible(false);
        clients.setVisible(true);
    }
});

写下这个:

JPanel clients = new JPanel();
contentPane.add(clients, "name_714431450350356");
clients.setLayout(null);
JButton btnHome = new JButton("Home");
btnHome.setBounds(169, 107, 89, 23);
clients.add(btnHome);
在添加动作侦听器之前