为什么当我添加一个for循环时,我的jframe会变黑?

时间:2015-04-19 11:38:18

标签: java for-loop jframe

我试图通过创建颜色列表然后使用for循环循环然后重新绘制来在我的jframe中制作闪烁的灯光。但是当我为我的代码添加一个for循环时,整个事情都会出错,我得到一个黑屏,它就会消失。为什么会这样?

 public class bb {

    static Color colors[] = {Color.ORANGE, Color.GRAY};
    public static void main(String[] args) {

    JFrame frame = new JFrame();
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(400, 525);

    JPanel panel = new JPanel() {

        @Override
        public void paintComponent(Graphics g) {

            JButton smallerButton = new JButton("Flash");
            JButton largerButton = new JButton("Steady");

            JPanel southPanel = new JPanel(); 
            southPanel.add(smallerButton);
            southPanel.add(largerButton);
            frame.add(southPanel, BorderLayout.SOUTH);

            super.paintComponent(g);
            g.setColor(Color.BLACK);
            g.fillRect(180, 110, 10, 30);
            g.drawRect(180, 140, 9, 30);
            g.fillRect(180, 170, 10, 30);
            g.drawRect(180, 200, 9, 30);
            g.fillRect(180, 230, 10, 30);
            g.drawRect(180, 260, 9, 30);
            g.fillRect(180, 290, 10, 30);
            g.drawRect(180, 310, 9, 30);
            g.fillRect(180, 340, 10, 30);

            int i = 0;
            g.setColor(colors[i]);

            for(i=0; i <= colors.length; i++){

                g.fillOval(160, 70, 50, 50);
                if (i ==colors.length){
                    i=0;
                }
                frame.repaint();
            }

            smallerButton.addActionListener(new ActionListener()
            {
              public void actionPerformed(ActionEvent e)
              {

                  String action = e.getActionCommand();
                  if (action.equals("Flash")){  
                  }
              } 
            });
        }
    };

    frame.add(panel);
    frame.validate();
    }
}

1 个答案:

答案 0 :(得分:2)

此语句将循环索引重置为0,导致循环无限期地阻塞EDT

if (i == colors.length) {
    i = 0;
}

因为你超过了for语句中的最后一个数组索引。

看一下使用Swing Timer来实现此功能。