Java 在Swing中使用setVisible(布尔值)在屏幕之间切换

Java 在Swing中使用setVisible(布尔值)在屏幕之间切换,java,swing,Java,Swing,我创建了一个简单的Swing游戏,它有一个屏幕。单击一个单元格会导致两个相邻单元格的颜色变化。这是通过以下代码实现的: public class SelfGrid extends BattleGrid { @Override protected JPanel getCell() { JPanel panel = new JPanel(); panel.setBackground(Color.black); panel.setB

我创建了一个简单的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()方法实际上在屏幕上重新绘制组件。我如何在不更改内容的情况下恢复原始屏幕?谢谢。

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

这不是我最近几天第一次看到这个(基本)问题。正如前一张海报上所说,如果没有答案,就不可能为您的问题提供准确可靠的解决方案这是一个没有人能回答的“基本”问题……:)