如何使用ActionListener在同一个Applet中添加新Panel

时间:2013-03-11 20:37:24

标签: java swing japplet

我有一个包含Panel的applet。在面板中添加一个按钮,单击该按钮将删除当前面板,新的面板将添加到当前的小程序。

但我没有得到所需的输出!!!

我想用ActionListener中的新Panel替换当前添加到Applet的显示面板。

请告诉错误!!

import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;
import javax.swing.JPanel;

public class Init extends JApplet {

    public Display ref;
    public NewDisplay ref2;

    public class Display extends JPanel  implements ActionListener {

        public Display() {
            initComponents();
        }

        private void initComponents() {
            jButton1 = new javax.swing.JButton();
            jButton1.setText("New Game");
            add(jButton1);
            jButton1.addActionListener(this);

        }
        public javax.swing.JButton jButton1;

        @Override
        public void actionPerformed(ActionEvent e) {
            String x = e.getActionCommand();
            if (x.equals("New Game")) {
                System.out.println("clicked");
                //ref.setVisible(false);
                this.removeAll();
                //add(ref2);
                add(ref2);
                invalidate();
                revalidate();
                repaint();
            }
        }
    }

    public class NewDisplay extends JPanel {

        public NewDisplay() {
            setSize(800, 600);
        }

        @Override
        public void paintComponent(Graphics g) {
            g.setColor(Color.RED);
            g.fillRect(0, 0, 800, 600);
        }
    }

    @Override
    public void init() {
        ref = new Display();
        ref2 = new NewDisplay();
        add(ref);
        setSize(800,600);

    }
}

1 个答案:

答案 0 :(得分:3)

您不应该使用setSize()方法来设置组件的大小。

布局管理器使用组件的首选大小。您应该覆盖面板的getPreferredSzie()方法以返回所需的大小。

public class NewDisplay extends JPanel {

    public NewDisplay() {
    //   setSize(800, 600);
    }

    @Override
    public Dimension getPreferredSize()
    {
        return new Dimension(800, 600);
    }

    @Override
    public void paintComponent(Graphics g) {
        g.setColor(Color.RED);
        g.fillRect(0, 0, 800, 600);
    }
}

或者更好的解决方案是使用卡片布局,只需将面板转入和拉出即可。请参阅How to Use Card Layout