我正在尝试构建一个9x9数独谜题。对于UI部分,我想在单击时更改单元格的背景,并在单击任何其他单元格时返回到正常。以下是我的Cell Class。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.BevelBorder;
public class Cell extends JPanel implements MouseListener{
Cell[][] cell;
private int x;//x pos;
private int y;//y pos;
private int num=0;
private JLabel lnum;
private Color bg;
private static int xpos=-1;
private static int ypos=-1;
private static Color back;
public Cell(Cell[][] cell,int x, int y)
{
this.cell=cell;
this.x=x;
this.y=y;
x+=1; y+=1;
setBorder(BorderFactory.createLineBorder(Color.yellow));
if((x%6>=1&&x%6<=3)&&(y%6==0||y%6>3)||(y%6>=1&&y%6<=3)&&(x%6==0||x%6>3))
bg=Color.BLUE;
else
bg=Color.BLACK;
setBackground(bg);
setPreferredSize(new Dimension(50,50));
lnum=new JLabel(String.valueOf(num),null,JLabel.CENTER);
lnum.setForeground(Color.green);
add(lnum,SwingConstants.CENTER);
addMouseListener(this);
}
@Override
public void mouseClicked(MouseEvent e) {
if(xpos!=-1)
{
cell[xpos][ypos].setBackground(back);
cell[xpos][ypos].setBorder(BorderFactory.createLineBorder(Color.yellow));
}
xpos=x;
ypos=y;
back=bg;
setBackground(Color.LIGHT_GRAY);
setBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED,
Color.cyan,Color.BLUE));
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
@Override
public void mouseEntered(MouseEvent e) {
if(x!=xpos&&y!=ypos)
{
setBackground(Color.WHITE);
setBorder(BorderFactory.createLineBorder(Color.RED));
}
}
@Override
public void mouseExited(MouseEvent e) {
if(x!=xpos&&y!=ypos)
{
setBackground(bg);
setBorder(BorderFactory.createLineBorder(Color.yellow));
}
}
}
但是,单击一个然后另一个单元格后,还原为单元格的正常背景颜色和边框不起作用。请帮忙。提前谢谢。
答案 0 :(得分:1)
您最好使用AbstractButton
,例如JButton
,其中包含针对每个支持的Look&amp; amp; amp;感觉。您可以使用UIManager.put()
覆盖下面列出的与按钮相关的键的默认设置,如here所示。这个CellTest
也可能提出一些想法。右键单击以查看上下文菜单,并使用Tab键查看焦点侦听器的工作方式。
Button.background Button.border Button.darkShadow Button.defaultButtonFollowsFocus Button.disabledText Button.font Button.foreground Button.highlight Button.light Button.margin Button.opaque Button.select Button.shadow Button.textIconGap Button.textShiftOffset