📄 framequeen.java
字号:
/*
* FrameQueen.java
*
* Created on 2007年10月13日, 下午6:18
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/
package eightqueen;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
*
* @author linda
*/
public class FrameQueen extends JFrame {
JLabel jLabelMessage=new JLabel("第1种解法");//信息标签
JPanel jPanelChess=new JPanel();//棋盘面板
JPanel jPanelButton=new JPanel();//按钮面板
JPanel jPanelLabel=new JPanel();//标签面板
JButton jButtonDisplay=new JButton("显示");//显示按钮
JButton jButtonClear=new JButton("清除");//清除按钮
//非皇后位置图标
Icon IconNoQueen=new ImageIcon("..\\src\\eightqueen\\imageicons\\noqueen.jpg");
//皇后位置图标
Icon IconQueen=new ImageIcon("..\\src\\eightqueen\\imageicons\\queen.jpg");
int size=EightQueen.QueenMax*EightQueen.QueenMax;//棋盘格子总数
public JLabel[] jLabelImage=new JLabel[size];//棋盘格子标签数组
int i=0;
FrameQueen() {//构造方法
super("Java实现的八皇后问题");//窗口标题
addWindowListener(new WindowAdapter(){//窗口关闭事件侦听器
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
initialize();//调用initialize方法进行窗口初始化
}
public void initialize() {//进行窗口初始化
//设置棋盘面板布局
jPanelChess.setLayout(new GridLayout(EightQueen.QueenMax,EightQueen.QueenMax,2,2));
//设置棋盘面板尺寸
jPanelChess.setSize(76*EightQueen.QueenMax,86*EightQueen.QueenMax);
//设置按钮面板尺寸
jPanelButton.setSize(50,50);
//设置信息标签前景色(字体颜色)为红色
jLabelMessage.setForeground(Color.red);
for(int j=0;j< size;j++) {//画出第一种解法棋盘
String str;
str=(EightQueen.rows[0].substring(j,j+1)).trim();
if(str.equals("+"))//皇后位置
jLabelImage[j]=new JLabel(IconQueen);//设置皇后位置图标
else
jLabelImage[j]=new JLabel(IconNoQueen);//设置非皇后位置图标
}
i++;
//添加按钮事件侦听器
jButtonDisplay.addActionListener(new Listener());
jButtonClear.addActionListener(new Listener());
for(int i=0;i< size;i++)//棋子图标添加到棋盘面板
jPanelChess.add(jLabelImage[i]);
//按钮添加到按钮面板
jPanelButton.add(jButtonDisplay);
jPanelButton.add(jButtonClear);
//信息标签添加到标签面板
jPanelLabel.add(jLabelMessage);
//将各个面板添加到主窗口
getContentPane().add(jPanelLabel,BorderLayout.NORTH);
getContentPane().add(jPanelChess,BorderLayout.CENTER);
getContentPane().add(jPanelButton,BorderLayout.SOUTH);
//设置主窗口位置
setLocation(300,0);
//设置主窗口尺寸
setSize(76*EightQueen.QueenMax+50,86*EightQueen.QueenMax+50);
//设置各个面板背景色
jPanelChess.setBackground(Color.ORANGE);
jPanelButton.setBackground(Color.YELLOW);
jPanelLabel.setBackground(Color.green);
//设置主窗口背景色
setBackground(Color.MAGENTA);
//显示主窗口
setVisible(true);
}
class Listener implements ActionListener {//侦听器类
public void actionPerformed(ActionEvent e) {//事件处理
if(e.getSource()==jButtonDisplay)//“显示”按钮事件处理
if(i< EightQueen.oktimes) {//第1至91种解法
for(int j=0;j< size;j++) {//画出该种解法棋盘
String str;
str=(EightQueen.rows[i].substring(j,j+1)).trim();
if(str.equals("+"))
jLabelImage[j].setIcon(IconQueen);
else
jLabelImage[j].setIcon(IconNoQueen);
jLabelMessage.setText("第"+(i+1)+"种解法");
}
i++;//准备显示下一种解法
}
else {//第92种解法
i=0;//计数器重置
for(int j=0;j< size;j++) {//画出第92种解法棋盘
String str;
str=(EightQueen.rows[i].substring(j,j+1)).trim();
if(str.equals("+"))
jLabelImage[j].setIcon(IconQueen);
else
jLabelImage[j].setIcon(IconNoQueen);
jLabelMessage.setText("第"+(i+1)+"种解法");
}
i++;//准备显示第一种解法
}
if(e.getSource()==jButtonClear) {//"清除"按钮事件处理
for(int j=0;j< size;j++) {
jLabelImage[j].setIcon(IconNoQueen);//清除棋盘
}
i=0;
jLabelMessage.setText("清除");
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -