如何通过单击GUI中的按钮来更改面板的内容?

时间:2013-03-08 08:23:28

标签: java swing netbeans jpanel jbutton

呼。我在这个问题上一直困扰着这么久。我正在做一个模拟流行测验的GUI程序。但是当我希望我的程序像这样时,我不知道要放的代码是什么...... start up

当我点击开始按钮时,面板应该是这样的...... question

到目前为止,这就是我对启动菜单的看法......

public static void main (String []args){
    JFrame f = new JFrame("Pop Quiz");
    f.setSize(400,300);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLayout(null);
    f.setResizable(false);

    JPanel p1 = new JPanel();
    p1.setSize(400,100);
    p1.setLocation(0,0);
    p1.setLayout(new GridLayout(3,1));
    f.add(p1);

    JLabel l1 = new JLabel("Welcome to POP Quiz!");
    p1.add(l1);

    JLabel l2 = new JLabel("Enter your name:");
    p1.add(l2);

    final JTextField name = new JTextField ();
    p1.add(name);

    JPanel p2 = new JPanel();
    p2.setSize(400,50);
    p2.setLocation(0,225);
    f.add(p2);

    JButton start = new JButton ("Start");
    p2.add(start);

    start.addActionListener(new ActionListener(){
         public void actionPerformed(ActionEvent e){
             String player = name.getText();
             //what should be added here to change the contents of the panel?
         }
    });

    f.show();
}

对于问题......

public static void main(String[] args){
    JFrame f = new JFrame("Pop Quiz");
    f.setSize(400,300);
    f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    f.setLayout(null);
    f.setResizable(false);

    JPanel p1 = new JPanel();
    p1.setSize(400,100);
    p1.setBackground(Color.PINK);
    f.add(p1);

    JLabel question = new JLabel();
    question.setText("In computers, what is the smallest and basic unit of information storage?");
    p1.add(question);

    JPanel p2 = new JPanel();
    p2.setSize(400,175);
    p2.setLocation(0,100);
    p2.setLayout(new GridLayout(2,4));
    f.add(p2);

    JButton a = new JButton("a. Bit");
    p2.add(a);

    JButton b = new JButton("b. Byte");
    p2.add(b);

    JButton c = new JButton("c. Data");
    p2.add(c);        

    JButton d = new JButton("d. Newton");
    p2.add(d);        

    f.show();
}

我有人可以提供帮助,我真的很感激。提前致谢!祝你今天愉快! :)

4 个答案:

答案 0 :(得分:1)

使用CardLayout。如图所示here

Game view High Scores view

提示

布局

f.setLayout(null);

使用布局!我不能强调这一点。布局可能看起来很复杂,但它们是在GUI中布置复杂的组件组的唯一可行解决方案,旨在用于不同平台(PLAF,屏幕分辨率......)。

控制

JButton a = new JButton("a. Bit");
p2.add(a);

JButton b = new JButton("b. Byte");
// ..

鉴于用于按钮的字符串的性质,它们似乎最好是JComboBoxJListButtonGroup中的按钮。

不推荐使用的方法

f.show();

不推荐使用此方法,您的编译器应该警告您不推荐使用此方法,或者还有其他警告被忽略。查看这些警告,修复它们。方法因某种原因而被弃用。

答案 1 :(得分:0)

尝试f.getContentPane()。add(panel);

答案 2 :(得分:0)

Try this.. 


   public class test {
    public static void main(String[] args) {
        final JFrame f = new JFrame("Pop Quiz");
        f.setSize(400, 300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLayout(null);
        f.setResizable(false);

        final JPanel p1 = new JPanel();
        p1.setSize(400, 100);
        p1.setLocation(0, 0);
        p1.setLayout(new GridLayout(3, 1));
        f.add(p1);

        JLabel l1 = new JLabel("Welcome to POP Quiz!");
        p1.add(l1);

        JLabel l2 = new JLabel("Enter your name:");
        p1.add(l2);

        final JTextField name = new JTextField();
        p1.add(name);

        final JPanel p2 = new JPanel();
        p2.setSize(400, 50);
        p2.setLocation(0, 225);
        f.add(p2);

        JButton start = new JButton("Start");
        p2.add(start);

        start.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {
                String player = name.getText();
               p1.setVisible(false);
               p2.setVisible(false);
                JPanel testPanel = new JPanel();
                testPanel.setSize(400, 100);
                testPanel.setBackground(Color.PINK);
                f.add(testPanel);

                JLabel question = new JLabel();
                question.setText("<html>In computers, what is the smallest and basic unit<br/> of information storage?</html>");
                testPanel.add(question);

                JPanel p2 = new JPanel();
                p2.setSize(400, 175);
                p2.setLocation(0, 100);
                p2.setLayout(new GridLayout(2, 4));
                f.add(p2);

                JButton a = new JButton("a. Bit");
                p2.add(a);

                JButton b = new JButton("b. Byte");
                p2.add(b);

                JButton c = new JButton("c. Data");
                p2.add(c);

                JButton d = new JButton("d. Newton");
                p2.add(d);

                f.show();
            }
        });

        f.show();
    }
}

答案 3 :(得分:0)

实现这一目标的步骤:
1.创建面板并添加到JFrame
2.将内容添加到 JPanel中的 welcomePanel
3.用户按下 welcomePanel 中的“开始”按钮。在容器上拨打removeAll() 4.在主要 JPanel contentPanel 中添加新内容,并致电revalidate(),这将更新

注意:对于此

,您不需要单独的jframe实例