9

2つの異なるパネルに2つのボタンを追加しました。最初のボタンをクリックすると、2番目のボタンが入った次のパネルに移動する必要があります。しかし、最初のボタンをクリックしてもボタンは置き換えられませんでした。

/*Java GUI*/

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;


public class TestFrame extends JFrame{

    private JPanel panel1, panel2;
    private JButton but,but2; 

    public TestFrame()
    {
        createPanel();
        addPanel();
    }

    private void createPanel()
    {
        panel1 = new JPanel();
        but = new JButton("TestButton");
        but.addActionListener(new addButtonListener());

        panel2 = new JPanel();
        but2 = new JButton("TestButton2");

    }

    private void addPanel()
    {
        panel1.add(but);
        panel2.add(but2);

        add(panel1);

    }

    class addButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent ae) 
        {
            getContentPane().removeAll();
            add(panel2);

            repaint();
        }
    }


    public static void main(String args[])
    {
        JFrame frame = new TestFrame();
        frame.setTitle("Test Software");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(500,500);

        frame.setVisible(true);
    }



}
4

2 に答える 2

5

検証を行ってから再ペイントする必要があります。

validate();
repaint();
于 2012-11-26T09:59:27.477 に答える
4

contentPaneからすべてを削除した後、ContentPaneにパネルを追加してみてください。2つ目は塗り直しです。パネルコンテンツを更新しない場合は、サイズ変更後にペイントされます。これが解決策の例です。



    import java.awt.event.ActionEvent;

    import java.awt.event.ActionListener;

    import javax.swing.*;

    public class Frame extends JFrame{
        private JPanel panel1, panel2;
        private JButton but,but2; 
        public Frame()
        {
           createPanel();
           addPanel();
        }
        private void createPanel()
        {
            panel1 = new JPanel();
            but = new JButton("TestButton");
            but.addActionListener(new addButtonListener());
            but.setBounds(50, 90, 190, 30);//There are example values but remember about setting size
            panel2 = new JPanel();
            but2 = new JButton("TestButton2");
            but2.setBounds(50, 50, 90, 30);//There are example values but remember about setting size
        }
        private void addPanel()
        {
            panel1.add(but);
            panel2.add(but2);
            add(panel1);
        }

        class addButtonListener implements ActionListener
        {
            public void actionPerformed(ActionEvent ae) 
            {
                getContentPane().removeAll();
                getContentPane().add(panel2);//Adding to content pane, not to Frame
                repaint();
                printAll(getGraphics());//Extort print all content
            }
        }

        public static void main(String args[])
        {
            Frame frame = new Frame();
            frame.setTitle("Test Software");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            frame.setSize(500,500);
            frame.setVisible(true);
        }

    }

Oracleドキュメントでは、contentPaneまたはFrameに直接追加する場合の違いについて説明しています。
http://docs.oracle.com/javase/tutorial/uiswing/components/toplevel.html

于 2012-11-26T10:28:02.690 に答える