0
我不知道用java。當我開始我的jframe(記憶卡遊戲)時,我點擊兩個相同的瓷磚只有第一個顯示。例如:當我在 新OrangeTile,然後在其他新OrangeTile單擊只有第一個停留在tile.showface我想在java中點擊它們時顯示同一個類瓷磚
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) {
}
}
再次..因此您需要縮小生態區範圍。這是太多的代碼。嘗試縮小 – Coffee
在你的解釋中不太容易理解基礎,但是你以錯誤的方式比較'SelectedTile == tile'..使用:'SelectedTile.equals(tile)'並確保實現equals方法在瓷磚中 – fmodos