Java - 按下按钮交换多个JFrame

时间:2013-05-13 14:35:27

标签: java swing button jframe jpanel

这是我第一次看到JFrames和JPannels而且我有点陷入困境。

我想要做的就是这个,我希望有一个开始屏幕然后基于用户按钮选择它交换到另一个屏幕。首先,我只有2个屏幕,但是一旦我继续前进,将有多个屏幕。我看过CardLayout,虽然这很好,但这不是我希望的方式,我希望能够先做到这一点。这就是我所拥有的。

Main.java

import java.awt.BorderLayout;
public class Main extends JFrame {

private JPanel contentPane;
protected boolean someCondition = false;

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

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

    if( someCondition == false ){
        showTest();
        someCondition = test.needToReg();
    }else{
        showTest2();
    }
}

private void showTest(){
    contentPane.removeAll();
    contentPane.add(new test());
    setContentPane(contentPane);
    revalidate();
    repaint();
}

private void showTest2(){
    contentPane.removeAll();
    contentPane.add(new test2());
    setContentPane(contentPane);
    revalidate();
    repaint();
}

}

test.java

import javax.swing.JPanel;


public class test extends JPanel {
    private JTextField textField;
    protected static boolean toReg = false;

    /**
     * Create the panel.
     */
    public test() {
        setLayout(null);

        JButton btnNewButton = new JButton("New button");
        btnNewButton.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                System.out.println("Mouse Clicked");
                System.out.println("Before " + toReg);
                toReg = true;
                System.out.println("After " + toReg);
            }
        });
        btnNewButton.setBounds(188, 166, 89, 23);
        add(btnNewButton);

        textField = new JTextField();
        textField.setBounds(150, 135, 86, 20);
        add(textField);
        textField.setColumns(10);

        JRadioButton rdbtnNewRadioButton = new JRadioButton("New radio button");
        rdbtnNewRadioButton.setBounds(6, 166, 109, 23);
        add(rdbtnNewRadioButton);
    }

    public static boolean needToReg(){
        return toReg;
    }
}

test2.java

import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JLabel;


public class test2 extends JPanel {

    /**
     * Create the panel.
     */
    public test2() {
        setLayout(null);

        JButton btnNewButton = new JButton("New button");
        btnNewButton.setBounds(56, 59, 89, 23);
        add(btnNewButton);

        JLabel lblNewLabel = new JLabel("New label");
        lblNewLabel.setBounds(122, 165, 46, 14);
        add(lblNewLabel);

    }
}

使用我包含的输出运行程序我得到了这个。

Mouse Clicked
Before false
After true
Mouse Clicked
Before true
After true
Mouse Clicked
Before true
After true
Mouse Clicked
Before true
After true
Mouse Clicked
Before true
After true

我希望我很清楚我想要做什么,我希望你能伸出援助之手。感谢

1 个答案:

答案 0 :(得分:1)

试试这个

单击主框架中的 screenSwapper 按钮时,新的面板将添加到主框架中,该主框架可以包含多个组件,我只添加了一个按钮

第二次单击时,此面板将被删除,第二个面板将添加到主框架中,之前的面板将被删除。

当你连续点击按钮时进行交换

如果您希望在 MyPanel1 和MyPanel2

的情况下保留一次创建的面板,则可以使用两个单身人士

您可以在每个面板上添加更多组件并进行测试。

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

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

public class Test extends JFrame {

    public boolean switcher;
    public JPanel currentPanel;
    public JPanel panel1;
    public JPanel panel2;

    public Test() {

        this.switcher = false;
        this.currentPanel = null;
        this.setSize(200, 200);

        panel1 = new JPanel();

        JButton screenSwapper = new JButton("Screen Swapper");

        panel1.add(screenSwapper);

        panel2 = new JPanel();

        this.getContentPane().setLayout(new GridLayout(2, 2));
        this.getContentPane().add(panel1);
        this.getContentPane().add(panel2);

        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        screenSwapper.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {

                if (switcher == false) {
                    currentPanel = new MyPanel1();
                    switcher = true;

                    if (panel2.getComponentCount() != 0) {
                        panel2.removeAll();
                    }

                } else {

                    switcher = false;
                    currentPanel = new MyPanel2();

                    if (panel2.getComponentCount() != 0) {
                        panel2.removeAll();
                    }

                }

                panel2.add(currentPanel);
                panel2.repaint();
                panel2.revalidate();
            }

        });

    }

    public static void main(String[] args) {
        Test t = new Test();
    }

}

这是第一个小组

import java.awt.BorderLayout;
import java.awt.Button;

import javax.swing.JPanel;


public class MyPanel1 extends  JPanel{



     public MyPanel1() {
        // TODO Auto-generated constructor stub

        this.setLayout(new BorderLayout());

        this.add(new Button("Button1"));

    }




}

这是第二个小组

import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JPanel;


public class MyPanel2 extends JPanel {



    public MyPanel2() {
        this.setLayout(new BorderLayout());

        this.add(new JButton("button2"));
    }
}