0

パネルを持つアプレットがあります。パネルにボタンが追加され、クリックすると現在のパネルが削除され、新しいパネルが現在のアプレットに追加されます。

しかし、目的の出力が得られません!!!

現在アプレットに追加されている表示パネルを、ActionListener からの新しいパネルに置き換えたいと考えています。

間違いを教えてください!!

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);

    }
}
4

1 に答える 1

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);
    }
}

または、より良い解決策は、カード レイアウトを使用して、パネルを左右に振ることです。カード レイアウトの使用方法 を参照してください。

于 2013-03-11T20:57:49.287 に答える