swing我希望在java中单击它们时显示相同的类分幅
我对java不太了解。当我开始我的jframe(记忆卡游戏)时,我点击两块相同的牌,只有第一块显示。示例:当我单击 新橙子酱,然后在另一个新橙子酱上,只有第一个橙子酱留在瓷砖上。表面文章
package control;
import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JFrame;
import Tiles.*;
public class Control extends JFrame {
private static final long serialVersionUID = 1L;
public static Control CurrentWindow = null;
private final String title ="Remembory";
private Tile SelectedTile = null;
private int points = 0;
public Control() {
setSize(250,260);
setTitle(title);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setUpGame();
setVisible(true);
}
private void setUpGame()
{
getContentPane().setLayout(new FlowLayout());
getContentPane().add(new OrangeTile());
getContentPane().add(new OrangeTile());
getContentPane().add(new YellowTile());
getContentPane().add(new YellowTile());
getContentPane().add(new GreenTile());
getContentPane().add(new GreenTile());
getContentPane().add(new RedTile());
getContentPane().add(new RedTile());
getContentPane().add(new BlueTile());
getContentPane().add(new BlueTile());
getContentPane().add(new GrayTile());
getContentPane().add(new GrayTile());
getContentPane().add(new WhiteTile());
getContentPane().add(new WhiteTile());
getContentPane().add(new TurqTile());
getContentPane().add(new TurqTile());
}
private void AddPoint() {
points++;
System.out.println(" + " + points + "Points");
}
public void TileClicked (Tile tile){
if (SelectedTile == null) {
tile.showFace();
SelectedTile = tile;
return;
}
if (SelectedTile == tile) {
tile.hideFace();
SelectedTile = null;
return;
}
if (points == 7){
System.exit(0);
}
if (SelectedTile.getFaceColor() == tile.getFaceColor()) {
AddPoint();
getContentPane().remove(SelectedTile);
getContentPane().remove(tile);
SelectedTile = null;
return;
}
SelectedTile.hideFace();
SelectedTile = null;
}
public static void main(String[] args){
CurrentWindow = new Control();
}
}
package Tiles;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import javax.swing.JLabel;
public class Tile extends JLabel implements MouseListener{
private static final long serialVersionUID = 1L;
private Color faceColor = Color.BLACK;
private final static Dimension size = new Dimension(50,50);
public Tile()
{
setMinimumSize(size);
setMaximumSize(size);
setPreferredSize(size);
setOpaque(true);
setBackground(new Color(213,86,31));
addMouseListener(this);
}
public void showFace()
{
setBackground(faceColor);
}
public void hideFace()
{
setBackground(new Color(213,86,31));
}
protected void setFaceColor(Color c)
{
this.faceColor = c;
}
public Color getFaceColor()
{
return this.faceColor;
}
public void mouseClicked(MouseEvent arg0) {
control.Control.CurrentWindow.TileClicked(this);
}
public void mouseEntered(MouseEvent arg0) {
}
public void mouseExited(MouseEvent arg0) {
}
public void mousePressed(MouseEvent arg0) {
}
public void mouseReleased(MouseEvent arg0) {
}
}
# 1 楼答案
在public void TileClicked(平铺平铺)中,当SelectedFile==null时,只能使用平铺ShowFace一次 第一次输入此方法时,设置SelectedFile=tile,以便下次输入此方法时 if(selectedFile==null)为false,因此不能调用tileShowface方法两次 除非将SelectedFile设置回空
也许你应该使用一个不同的计数器来知道这是玩家点击的第一个磁贴还是第二个磁贴。点击两次不同的瓷砖后,将计数器设置回零