public void mouseEntered(MouseEvent e){ Cell.this.setEnter(true); } public void mouseExited(MouseEvent e){ Cell.this.setEnter(false); repaint(); } } protected boolean isRepeated(int number){ int x = 0, y = 0;
if(this.getBelongsToAnswersPart()){ x = Sudoku.getLastX() / 3; y = Sudoku.getLastY() / 3;
for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++){ //检查同格 if (Sudoku.sudoku[x][y].grid[i][j].getNumber() == number){ return true; } //检查同列 if (Sudoku.sudoku[x+i][y].grid[Sudoku.getLastX() % 3][j].getNumber() == number){ return true; } //检查同行 if (Sudoku.sudoku[x][y+i].grid[j][Sudoku.getLastY() % 3].getNumber() == number){ return true; } } } }
if(this.getBelongsToQuestionsPart()){ x = CustomizedSudoku.getLastX() / 3; y = CustomizedSudoku.getLastY() / 3;
for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++){ //检查同格 if (CustomizedSudoku.sudoku[x][y].grid[i][j].getNumber() == number){ return true; } //检查同列 if (CustomizedSudoku.sudoku[x+i][y].grid[CustomizedSudoku.getLastX() % 3][j].getNumber() == number){ return true; } //检查同行 if (CustomizedSudoku.sudoku[x][y+i].grid[j][CustomizedSudoku.getLastY() % 3].getNumber() == number){ return true; } } } }
if(number == 0){ return false; } return false; } } Grid类: public class Grid extends JPanel{ Cell[][] grid = new Cell[3][3];
public Grid() { this.setOpaque(false); this.setPreferredSize(new Dimension(122, 122)); this.setLayout(new GridLayout(3, 3, 1, 1)); for (int i = 0; i < 3; i++){ for (int j = 0; j < 3; j++){ grid[i][j] = new Cell(); this.add(grid[i][j]); } } } }应该是这两个里面哪个地方出问题了。。
我洗澡完上来仔细看了再回复,swing比较精通,乐于解决问题:)
谢谢!! 另外Cell类某些地方我小改了些内容。。不过还是显示重叠的- -
代码编译不过,看得累死了,给你一段我写的代码,看看是否对你有用。public class HomePageModulePanel extends JPanel { private ImageIcon wallpaper; public HomePageModulePanel(String title) { if (title.equals("mokuai1")) { wallpaper = ImageIconUtil.getImageIcon("01.PNG"); } else if(title.equals("mokuai2")) { wallpaper = ImageIconUtil.getImageIcon("02.PNG"); } ...... } protected void paintComponent(Graphics g) { // Image image = wallpaper.getImage(); int cw = getWidth(); int ch = getHeight(); ImageIcon scaledSymbol = new ImageIcon(wallpaper.getImage() .getScaledInstance(cw, ch, Image.SCALE_SMOOTH)); g.drawImage(scaledSymbol.getImage(), 0, 0, this); } } } public class HomePagePanel extends JPanel { public HomePagePanel() { super(); setBorder(new EmptyBorder(8, 8, 8, 8)); setLayout(new GridLayout(3, 2, 8, 8)); initView(); } public void initView() { add(new HomePageModulePanel("mokuai1")); add(new HomePageModulePanel("mokuai2")); ...... }}
//该位置存储的数
private int number;
//该位置能否被修改
private boolean changeable;
//判断该位置是否属于答案区
private boolean belongsToAnswersPart;
//判断该位置是否属于出题区(用户自定义题目时使用)
private boolean belongsToQuestionsPart;
//该位置的坐标
private int x, y;
//判断鼠标是否已进入该位置
private boolean enter;
//判断该位置是否已被选中
private boolean chosen;
//判断该位置是否属于自定义时的地图
private boolean belongsToCustom;
public Cell(){
this.setOpaque(false);
this.setPreferredSize(new Dimension(40, 40));
this.addMouseListener(new MouseListener());
}
public int getNumber(){
return this.number;
}
public void setNumber(int num){
this.number = num;
repaint();
}
public boolean getChangeable(){
return this.changeable;
}
public void setChangeable(boolean changeable){
this.changeable = changeable;
}
public boolean getBelongsToAnswersPart(){
return this.belongsToAnswersPart;
}
public void setBelongsToAnswersPart(boolean isAnswersPart){
this.belongsToAnswersPart = isAnswersPart;
}
public boolean getBelongsToQuestionsPart(){
return this.belongsToQuestionsPart;
}
public void setBelongsToQuestionsPart(boolean isQuestionsPart){
this.belongsToAnswersPart = isQuestionsPart;
}
public int getX(){
return this.x;
}
public void setX(int x){
this.x = x;
}
public int getY(){
return this.y;
}
public void setY(int y){
this.y = y;
}
public boolean getEnter(){
return this.enter;
}
public void setEnter(boolean enter){
this.enter = enter;
repaint();
}
public boolean getChosen(){
return this.chosen;
}
public void setChosen(){
this.chosen = !this.chosen;
repaint();
}
public void setChosen(boolean choose){
this.chosen = choose;
repaint();
}
public boolean getBelongsToCustom(){
return this.belongsToCustom;
}
public void setBelongsToCustom(boolean belongsToCustom){
this.belongsToCustom = belongsToCustom;
}
protected void paintComponent(Graphics g){
super.paintComponent(g);
if (this.getChosen()){
Graphics2D g2d=(Graphics2D)g;
Stroke stroke=new BasicStroke(5.0f);
g2d.setStroke(stroke);
g2d.setColor(Color.RED);
g2d.drawRoundRect(0, 0, 40, 40, 10, 10);
}
if (this.getEnter()){
Graphics2D g2d=(Graphics2D)g;
Stroke stroke=new BasicStroke(4.0f);
g2d.setStroke(stroke);
g2d.setColor(Color.PINK);
g2d.drawRoundRect(0, 0, 40, 40, 10, 10);
}
for(int i = 1; i < 10; i++){
if(this.number == i){
if((this.getChangeable() == false && this.getBelongsToAnswersPart() == false ) || this.getBelongsToCustom()){
try {
Image img = ImageIO.read(new File("image/number/已知" + i + ".png"));
g.drawImage(img,0, 0, 40, 40, this);
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "找不到图片!");
}
}
else {
try {
Image img = ImageIO.read(new File("image/number/输入" + i + ".png"));
g.drawImage(img, 0, 0, 40, 40, this);
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "找不到图片!");
}
}
}
}
if (!(this.getBelongsToAnswersPart() || this.getBelongsToQuestionsPart())){
if (this.isRepeated(Cell.this.getNumber())){
try {
Image img = ImageIO.read(new File("image/number/重复.png"));
g.drawImage(img, 0, 0, 40, 40, this);
} catch (IOException e) {
e.printStackTrace();
JOptionPane.showMessageDialog(null, "找不到图片!");
}
}
}
}
private class MouseListener extends MouseAdapter {
public void mouseClicked(MouseEvent e){
if(Cell.this.getChangeable()){
Cell.this.setChosen();
if(Cell.this.getBelongsToCustom()){
CustomizedSudoku.setSiteSelected();
}else {
Sudoku.setSiteSelected();
}
if(!(Cell.this.getBelongsToAnswersPart() || Cell.this.getBelongsToQuestionsPart())){
if (Cell.this.getChosen()){
for(int i = 0; i < 9; i++){
for(int j = 0; j < 9; j++){
if (i != Cell.this.getX() && j != Cell.this.getY()){
if (Cell.this.getBelongsToCustom()){
CustomizedSudoku.sudoku[i / 3][j / 3].grid[i % 3][j % 3].setChosen(false);
}else {
Sudoku.sudoku[i / 3][j / 3].grid[i % 3][j % 3].setChosen(false);
}
}
}
}
}
}
//该位置被选中
if(Cell.this.getBelongsToCustom()){
CustomizedSudoku.setLastX(Cell.this.getX());
CustomizedSudoku.setLastY(Cell.this.getY());
}else{
Sudoku.setLastX(Cell.this.getX());
Sudoku.setLastY(Cell.this.getY());
}
}
else if(Cell.this.getBelongsToAnswersPart()){
//已经有位置被选中了
if(Sudoku.getSiteSelected()){
//重复与否判断
if (!Cell.this.isRepeated(Cell.this.getNumber())){
Sudoku.sudoku[Sudoku.getLastX() / 3][Sudoku.getLastY() / 3].grid[Sudoku.getLastX() % 3][Sudoku.getLastY() % 3].setNumber(Cell.this.getNumber());
Sudoku.displayArray[Sudoku.getLastX()][Sudoku.getLastY()] = Cell.this.getNumber();
}else {
Sudoku.sudoku[Sudoku.getLastX() / 3][Sudoku.getLastY() / 3].grid[Sudoku.getLastX() % 3][Sudoku.getLastY() % 3].setNumber(Cell.this.getNumber());
Timer timer = new Timer(2000, new ActionListener(){
public void actionPerformed(ActionEvent e){
Sudoku.sudoku[Sudoku.getLastX() / 3][Sudoku.getLastY() / 3].grid[Sudoku.getLastX() % 3][Sudoku.getLastY() % 3].setNumber(0);
Sudoku.displayArray[Sudoku.getLastX()][Sudoku.getLastY()] = 0;
}
});
timer.start();
if (Sudoku.sudoku[Sudoku.getLastX() / 3][Sudoku.getLastY() / 3].grid[Sudoku.getLastX() % 3][Sudoku.getLastY() % 3].getNumber() == 0){
timer.stop();
}
}
}
}
else if(Cell.this.getBelongsToQuestionsPart()){
if(CustomizedSudoku.getSiteSelected()){
//重复与否判断
if (!Cell.this.isRepeated(Cell.this.getNumber())){
CustomizedSudoku.custom[CustomizedSudoku.getLastX()][CustomizedSudoku.getLastY()] = Cell.this.getNumber();
CustomizedSudoku.sudoku[CustomizedSudoku.getLastX() / 3][CustomizedSudoku.getLastY() / 3].grid[CustomizedSudoku.getLastX() % 3][CustomizedSudoku.getLastY() % 3].setNumber(Cell.this.getNumber());
}else {
CustomizedSudoku.sudoku[CustomizedSudoku.getLastX() / 3][CustomizedSudoku.getLastY() / 3].grid[CustomizedSudoku.getLastX() % 3][CustomizedSudoku.getLastY() % 3].setNumber(Cell.this.getNumber());
Timer timer = new Timer(2000, new ActionListener(){
public void actionPerformed(ActionEvent e){
CustomizedSudoku.sudoku[CustomizedSudoku.getLastX() / 3][CustomizedSudoku.getLastY() / 3].grid[CustomizedSudoku.getLastX() % 3][CustomizedSudoku.getLastY() % 3].setNumber(0);
}
});
timer.start();
if (CustomizedSudoku.sudoku[CustomizedSudoku.getLastX() / 3][CustomizedSudoku.getLastY() / 3].grid[CustomizedSudoku.getLastX() % 3][CustomizedSudoku.getLastY() % 3].getNumber() == 0){
timer.stop();
}
}
}
}
//**********尚未:如果点了提示,则在小面板中标出可行的数字
}
public void mouseEntered(MouseEvent e){
Cell.this.setEnter(true);
}
public void mouseExited(MouseEvent e){
Cell.this.setEnter(false);
repaint();
}
} protected boolean isRepeated(int number){
int x = 0, y = 0;
if(this.getBelongsToAnswersPart()){
x = Sudoku.getLastX() / 3;
y = Sudoku.getLastY() / 3;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
//检查同格
if (Sudoku.sudoku[x][y].grid[i][j].getNumber() == number){
return true;
}
//检查同列
if (Sudoku.sudoku[x+i][y].grid[Sudoku.getLastX() % 3][j].getNumber() == number){
return true;
}
//检查同行
if (Sudoku.sudoku[x][y+i].grid[j][Sudoku.getLastY() % 3].getNumber() == number){
return true;
}
}
}
}
if(this.getBelongsToQuestionsPart()){
x = CustomizedSudoku.getLastX() / 3;
y = CustomizedSudoku.getLastY() / 3;
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
//检查同格
if (CustomizedSudoku.sudoku[x][y].grid[i][j].getNumber() == number){
return true;
}
//检查同列
if (CustomizedSudoku.sudoku[x+i][y].grid[CustomizedSudoku.getLastX() % 3][j].getNumber() == number){
return true;
}
//检查同行
if (CustomizedSudoku.sudoku[x][y+i].grid[j][CustomizedSudoku.getLastY() % 3].getNumber() == number){
return true;
}
}
}
}
if(number == 0){
return false;
}
return false;
}
}
Grid类:
public class Grid extends JPanel{
Cell[][] grid = new Cell[3][3];
public Grid() {
this.setOpaque(false);
this.setPreferredSize(new Dimension(122, 122));
this.setLayout(new GridLayout(3, 3, 1, 1));
for (int i = 0; i < 3; i++){
for (int j = 0; j < 3; j++){
grid[i][j] = new Cell();
this.add(grid[i][j]);
}
}
}
}应该是这两个里面哪个地方出问题了。。
谢谢!!
另外Cell类某些地方我小改了些内容。。不过还是显示重叠的- -
{
private ImageIcon wallpaper;
public HomePageModulePanel(String title)
{
if (title.equals("mokuai1"))
{
wallpaper = ImageIconUtil.getImageIcon("01.PNG");
}
else if(title.equals("mokuai2"))
{
wallpaper = ImageIconUtil.getImageIcon("02.PNG");
}
......
}
protected void paintComponent(Graphics g)
{
// Image image = wallpaper.getImage();
int cw = getWidth();
int ch = getHeight(); ImageIcon scaledSymbol = new ImageIcon(wallpaper.getImage()
.getScaledInstance(cw, ch, Image.SCALE_SMOOTH));
g.drawImage(scaledSymbol.getImage(), 0, 0, this);
}
}
}
public class HomePagePanel extends JPanel
{
public HomePagePanel()
{
super();
setBorder(new EmptyBorder(8, 8, 8, 8));
setLayout(new GridLayout(3, 2, 8, 8));
initView();
} public void initView()
{
add(new HomePageModulePanel("mokuai1"));
add(new HomePageModulePanel("mokuai2"));
......
}}