⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 framequeen.java

📁 八皇后问题图形界面实现
💻 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 + -