我在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()方法实际上重新绘制了屏幕上的组件。如何在不对其内容进行任何更改的情况下恢复原始屏幕?谢谢。
答案 0 :(得分:2)
不是直接对UI元素进行编程颜色更改,而是创建一个表示单元格颜色的二维数组,然后对其进行修改。然后,每次可见性更改或单击单元格时,根据数组中的值重新绘制单元格。