1

私は配列を宣言しました:

private javax.swing.JPanel[] panelArray = new javax.swing.JPanel[3];

また、panel0、panel1、panel2 の 3 つのパネルがあります。これらのパネルをアレイに追加できますか? すなわち

panelArray[0] = panel0;
panelArray[1] = panel1;
panelArray[2] = panel2;

そして、このように配列を操作しますか?

boolean[] myBools; .... then set them as true/false
for(int i=0; i<3; i++)
{
    if(myBools[i])
        panelArray[i].setVisible(true)
}

それは私にはうまくいかないので

4

3 に答える 3

5

私の側では、このプログラムでは正常に動作しています:

import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;

public class MyPanel
{   
    private JPanel[] panelArray = new JPanel[3];
    private boolean[] myBools = new boolean[]{false, false, false};
    private int counter = 0; 
    private int prvPanelCounter = 0;
    private Timer timer;
    private ActionListener timerAction = new ActionListener()
    {
        public void actionPerformed(ActionEvent ae)
        {
            counter++;
            if (counter > 2)
                counter = 0;
            myBools[counter] = true;
            for (int i = 0; i < 3; i++) 
            {
                if (myBools[i])
                {
                    panelArray[i].setVisible(myBools[i]);                   
                    panelArray[prvPanelCounter].setVisible(myBools[prvPanelCounter]);
                    myBools[i] = false; 
                    prvPanelCounter = i;
                    break;
                }
            }
        }
    };

    private void createAndDisplayGUI()
    {
        JFrame frame = new JFrame("Locate Mouse Position");
        frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

        JPanel panel0 = new JPanel();
        panel0.setOpaque(true);
        panel0.setBackground(Color.BLUE);       
        JPanel panel1 = new JPanel();
        panel1.setOpaque(true);
        panel1.setBackground(Color.RED);
        JPanel panel2 = new JPanel();
        panel2.setOpaque(true);
        panel2.setBackground(Color.DARK_GRAY);

        panelArray[0] = panel0;
        panelArray[1] = panel1;
        panelArray[2] = panel2;

        JComponent contentPane = (JComponent) frame.getContentPane();
        contentPane.setLayout(new GridLayout(0, 1));
        frame.add(panel0);  
        frame.add(panel1);  
        frame.add(panel2);  
        panel0.setVisible(myBools[counter]);
        panel1.setVisible(myBools[counter]);
        panel2.setVisible(myBools[counter]);
        frame.setSize(300, 300);
        frame.setLocationByPlatform(true);
        frame.setVisible(true);
        timer = new Timer(1000, timerAction);
        timer.start();
    }

    public static void main(String\u005B\u005D args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new MyPanel().createAndDisplayGUI();
            }
        });
    }
}
于 2012-04-27T13:49:47.617 に答える
5

やりたいことは実行できますが、次の点に注意してください。

  1. JPanel を参照する前に、必ず初期化してください。
  2. 「panelArray[i].setVisible(true)」ステートメントの後にはセミコロンが必要です。
  3. JFrame などの別のコンポーネントに追加しない限り、これらのパネルは表示されません。
  4. javax.swing.JPanel を記述するのではなく、ページの上部にある JPanel をインポートして、単に JPanel として参照することができます。
  5. 「if」ステートメントは不要です。.setVisible(myBools[i]); を実行するだけです。

これらがお役に立てば幸いです。

于 2012-04-27T13:17:26.640 に答える
1

はい、できます。myBools本当に配列を初期化していませんnewか?

于 2012-04-27T13:10:31.693 に答える