1

我已经声明了一个数组:

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

我也有 3 个面板:panel0、panel1 和 panel2。我可以将这些面板添加到阵列中吗?IE

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 回答