在Swing中使用setVisible(boolean)在屏幕之间切换

时间:2017-11-05 20:58:05

标签: java swing

我在Swing中创建了一个简单的游戏,它有一个屏幕。单击一个单元格会导致两个相邻单元格的颜色发生变化。这是通过以下代码实现的:

     public class SelfGrid extends BattleGrid {
        @Override
     protected JPanel getCell()
     {
    JPanel panel = new JPanel();
    panel.setBackground(Color.black);
    panel.setBorder(BorderFactory.createLineBorder(Color.blue, 1));

    panel.setPreferredSize(new Dimension(20, 20));


        panel.addMouseListener(new MouseAdapter()   {
        public void mouseReleased(MouseEvent e)
          {  

        panel.setSize(new Dimension(20,80));
        panel.setBackground(Color.orange);
      }
    }
    });

   return panel;
      }
    }

  public abstract class Battle extends JPanel {
   public BattleGrid() {
    this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
    JPanel grid = new JPanel();
    grid.setLayout(new GridLayout(0,10));
    JPanel panel = new JPanel();
        panel = getCell();

        grid.add(panel); 
        }
       }
    this.add(grid);
     }    
     protected abstract JPanel getCell();
     }

当我使用setVisible(boolean)方法在两个屏幕之间切换并恢复原始屏幕时,只有单击的单元格保持颜色。换句话说,每个JPanel的维度恢复到20,20。我被告知这是因为setVisible()方法实际上重新绘制了屏幕上的组件。如何在不对其内容进行任何更改的情况下恢复原始屏幕?谢谢。

1 个答案:

答案 0 :(得分:2)

不是直接对UI元素进行编程颜色更改,而是创建一个表示单元格颜色的二维数组,然后对其进行修改。然后,每次可见性更改或单击单元格时,根据数组中的值重新绘制单元格。