如何使 class 扩展 jLabel 以便它在我的主 class 中显示为 JLabel?
How to make a class extending a jLabel so that it appears as a JLabel in my main class?
所以,基本上我在做记忆。我有一个图块 class,此时它只有一个数字和一个布尔值(显示它是否被翻转)。我将所有数字复制为 Tile 对象并将它们随机化,然后将它们添加到我的布局中。
基本上,我需要它们以 JLabel 的形式出现在我的屏幕上,但我不太确定该怎么做?我应该扩展其他东西,还是在我的 Tile class 中做一些特别的事情?还是我其他地方的逻辑有问题?这是我此时的 Tile class(很少)
PS。我还需要为触发器使用定时器
class Tile extends JLabel implements ActionListener{
boolean flipped;
int imageNum;
ImageIcon image;
JLabel card;
Tile(int num, boolean f)
{
imageNum=num;
flipped=f;
card=new JLabel(""+imageNum);
}
public void flipCard()
{
}
public void actionPerformed(ActionEvent a)
{
}
如有任何帮助,我们将不胜感激!
编辑:
这是主要的 class 我尝试添加我的瓷砖的地方
JPanel gridPanel = new JPanel(new GridLayout(gridSize, gridSize));
Tile[][]tiles=new Tile[(gridSize*gridSize)/2][2];
boolean[][]tilePlaced=new boolean[(gridSize*gridSize)/2][2];
JLabel[][] cardsOnGrid = new JLabel[gridSize][gridSize];
for(int i=0;i<gridSize;i++)
{
for(int j=0;j<gridSize;j++)
cardsOnGrid[i][j]=new JLabel("");
}
for(int i=0; i<((gridSize*gridSize)/2);i++)
{
tiles[i][0]= new Tile(i, true);
tiles[i][1]= new Tile(i, true);
tilePlaced[i][0]=false;
tilePlaced[i][1]=false;
}
for(int i=0; i<gridSize;i++)
{
for(int j=0;j<gridSize;j++)
{
int tileNum = tileRandom(gridSize);
int tileNumVer = (int)Math.floor(Math.random()*2);
while(tilePlaced[tileNum][tileNumVer]==true)
{
tileNum = tileRandom(gridSize);
tileNumVer = (int)Math.floor(Math.random()*2);
}
gridPanel.add(tiles[tileNum][tileNumVer]);
tilePlaced[tileNum][tileNumVer]=true;
}
:'(
Tile(int num, boolean f){
imageNum=num;
flipped=f;
card=new JLabel(""+imageNum);//1. Remove this line and card Label
super.setText(String.valueOf(num));//ADD This line
}
只需创建 Object
个 Tile
Tile myLabel = new Tile(10,false);//this will create lable
因为你的 Tile
class 是 JLabel
的子类,不需要在 Tile
class 中创建 Label
作为 Tile
本身是一个 Label
。除此之外,您不会获得 JLabel
的操作事件。它不是使用 MouseListener
.
的可点击元素
所以,基本上我在做记忆。我有一个图块 class,此时它只有一个数字和一个布尔值(显示它是否被翻转)。我将所有数字复制为 Tile 对象并将它们随机化,然后将它们添加到我的布局中。
基本上,我需要它们以 JLabel 的形式出现在我的屏幕上,但我不太确定该怎么做?我应该扩展其他东西,还是在我的 Tile class 中做一些特别的事情?还是我其他地方的逻辑有问题?这是我此时的 Tile class(很少)
PS。我还需要为触发器使用定时器
class Tile extends JLabel implements ActionListener{
boolean flipped;
int imageNum;
ImageIcon image;
JLabel card;
Tile(int num, boolean f)
{
imageNum=num;
flipped=f;
card=new JLabel(""+imageNum);
}
public void flipCard()
{
}
public void actionPerformed(ActionEvent a)
{
}
如有任何帮助,我们将不胜感激! 编辑:
这是主要的 class 我尝试添加我的瓷砖的地方
JPanel gridPanel = new JPanel(new GridLayout(gridSize, gridSize));
Tile[][]tiles=new Tile[(gridSize*gridSize)/2][2];
boolean[][]tilePlaced=new boolean[(gridSize*gridSize)/2][2];
JLabel[][] cardsOnGrid = new JLabel[gridSize][gridSize];
for(int i=0;i<gridSize;i++)
{
for(int j=0;j<gridSize;j++)
cardsOnGrid[i][j]=new JLabel("");
}
for(int i=0; i<((gridSize*gridSize)/2);i++)
{
tiles[i][0]= new Tile(i, true);
tiles[i][1]= new Tile(i, true);
tilePlaced[i][0]=false;
tilePlaced[i][1]=false;
}
for(int i=0; i<gridSize;i++)
{
for(int j=0;j<gridSize;j++)
{
int tileNum = tileRandom(gridSize);
int tileNumVer = (int)Math.floor(Math.random()*2);
while(tilePlaced[tileNum][tileNumVer]==true)
{
tileNum = tileRandom(gridSize);
tileNumVer = (int)Math.floor(Math.random()*2);
}
gridPanel.add(tiles[tileNum][tileNumVer]);
tilePlaced[tileNum][tileNumVer]=true;
}
:'(
Tile(int num, boolean f){
imageNum=num;
flipped=f;
card=new JLabel(""+imageNum);//1. Remove this line and card Label
super.setText(String.valueOf(num));//ADD This line
}
只需创建 Object
个 Tile
Tile myLabel = new Tile(10,false);//this will create lable
因为你的 Tile
class 是 JLabel
的子类,不需要在 Tile
class 中创建 Label
作为 Tile
本身是一个 Label
。除此之外,您不会获得 JLabel
的操作事件。它不是使用 MouseListener
.