【问题标题】:Adding JPanels to JPanel array将 JPanel 添加到 JPanel 数组
【发布时间】:2012-04-27 13:08:27
【问题描述】:

我已经声明了一个数组:

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

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

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

因为这对我不起作用

【问题讨论】:

    标签: java arrays swing jpanel


    【解决方案1】:

    你想做的可以做,但这里有几点要牢记:

    1. 确保在引用 JPanel 之前对其进行初始化。
    2. 语句“panelArray[i].setVisible(true)”后面需要一个分号。
    3. 这些面板都不会可见,除非您将它们添加到另一个组件,例如 JFrame。
    4. 您可以直接在页面顶部导入 JPanel 并将其简称为 JPanel,而不是声明 javax.swing.JPanel。
    5. 您的“if”语句是不必要的。只需执行 .setVisible(myBools[i]);

    希望这些对你有所帮助。

    【讨论】:

    • 第 5 点 +1,哈哈,我睁开眼睛错过了这一点,但你太容易抓住了 :-)
    【解决方案2】:

    在我这边它工作正常,在这个程序中:

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

    【讨论】:

    • 谢谢你 :-)。不过,一个简单的问题,你怎么能改变你的天赋(你名字旁边的那张照片),我也可以这样做吗?
    • 恭喜获得银色 Swing 徽章 :-)
    • 谢谢你,就在今天我明白了:-)
    • @nIcEcOw 如果我能正确推断出您的意思以及相对 URL,请参阅 User nIcE cOw Edit
    • @AndrewThompson :不,实际上,我所看到的是,默认情况下天赋被更改为其他东西,比如你的天赋由stackoverflow给出,我也可以有那个天赋图片,或者我必须坚持分配给我的那个,不过,感谢这个链接,好像我以前没见过这个改变图片的东西
    【解决方案3】:

    是的,你可以。你真的没有用new 初始化myBools 数组吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多