**棋盘覆盖问题中输出覆盖图形(同一数字的为相同颜色)
运行截图:
源码:
BoardUI类:网格的划分以及染色,每个网格都是一个按钮
package sf;
import javax.swing.*;
import java.awt.*;
import java.awt.Color;
import java.util.ArrayList;
public class BoardUI extends JFrame{ //继承JFrame类
//int size=9;
//JTextField textField = new JTextField("Hello");
//JTextField tf[]=new JTextField[size];
ArrayList<Result> rs=ResultDao.getList();
Result rt=rs.get(0);
int size=rt.getSize();
JButton jbs[]=new JButton[size*size];
int[][] board= new int[100][100];
Color c[]=new Color[10];
public static void main(String[] args) { //主函数
BoardUI a=new BoardUI(); //实现界面
}
public BoardUI() //构造函数
{
//创建组件
c[0]=Color.blue;c[1]=Color.gray;c[2]=Color.green;c[3]=Color.yellow;c[4]=Color.red;
c[5]=Color.white;c[6]=Color.pink;c[7]=Color.cyan;c[8]=Color.orange;c[9]=Color.magenta;
System.out.println(ResultDao.getList());
ArrayList<Result> rs=ResultDao.getList();
Result rt=rs.get(0);
//int size=rt.getSize();
System.out.println(rt.getResultList().size());
// rt.getResultList().size();
board=(int[][]) rt.getResultList().toArray();
int[]n;
for(int i=0;i<size;i++){
for(int j=0;j<size;j++)
System.out.print(board[i][j]+" ");
System.out.println();
// jbs[i]=new JButton(String.valueOf(board[i][j]);
}
int len = 0;
//计算一维数组长度
for(int i = 0;i < size;i++){
len += size;
}
//复制元素
n = new int[len];
int index = 0;
for(int i = 0;i < size;i++){
for(int j = 0;j < size;j++){
n[index++] = board[i][j];
}
}
for(int i=0;i<size*size;i++)
{
//tf[i]=new JTextField(String.valueOf(i));
System.out.println(n[i]);
jbs[i]=new JButton(String.valueOf(n[i]));
}
//设置网格布局
this.setLayout(new GridLayout(size,size));
//添加组件
for(int i=0;i<size*size;i++)
{
this.add(jbs[i]);
}
for(int i=0;i<size*size;i++)
{
for(int j=0;j<size*size;j++) {
if(n[j]==-1)
jbs[j].setBackground(Color.BLACK);//blue gray green yellow red white pink DARK_GRAY orange magenta
if(i==n[j]) {
jbs[j].setBackground(c[i%10]);
}
}
}
//设置窗体属性
this.setTitle("网格"); //设置窗体标题
this.setSize(500, 500); //设置窗体大小
this.setLocation(400,200); //设置窗体初始位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //这个很重要!!!设置关闭窗体后虚拟机一同关闭,不设置的
this.setVisible(true); //设置可以显示
}
}
ChessBoard类:划分棋盘的算法,将结果存入实体类中
package sf;
import java.awt.EventQueue;
import java.util.Arrays;
public class ChessBoard {
int[][] board= new int[100][100];
static int tile=0;// 骨牌编号
public void chessBoard(int tr,int tc,int dr,int dc,int size) {
if(size==1)return;
int t=tile++;
int s=size/2;
if(dr<tr+s&&dc<tc+s)
chessBoard(tr,tc,dr,dc,s);
else {
board[tr+s-1][tc+s-1]=t;
chessBoard(tr,tc,tr+s-1,tc+s-1,s);
}
if(dr<tr+s&&dc>=tc+s)
chessBoard(tr,tc+s,dr,dc,s);
else {
board[tr+s-1][tc+s]=t;
chessBoard(tr, tc+s, tr+s-1, tc+s, s);
}
if(dr>=tr+s&&dc<tc+s)
chessBoard(tr+s, tc, dr, dc, s);
else {
board[tr+s][tc+s-1]=t;
chessBoard(tr+s, tc, tr+s, tc+s-1, s);
}
if(dr>=tr+s&&dc>=tc+s)
chessBoard(tr+s, tc+s, dr, dc, s);
else {
board[tr+s][tc+s]=t;
chessBoard(tr+s, tc+s, tr+s, tc+s, s);
}
}
public void disPlay(int tr,int tc,int dr,int dc,int size) {
board[dr][dc]=-1;
chessBoard(tr,tc,dr,dc,size);
for(int i=0;i<size;i++){
for(int j=0;j<size;j++)
System.out.print(board[i][j]+" ");
System.out.println();
}
Result r=new Result();
r.setSize(size);
r.setResultList(Arrays.asList(board));
ResultDao.add(r);
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
BoardUI frame = new BoardUI();
frame.setVisible(true);
//Result r=new Result();
//r.setSize(size);
//r.setResultList(Arrays.asList(board));
} catch (Exception e) {
e.printStackTrace();
}
}
});
//System.out.println(r.getSize());
}}
ResultDao类:存放result对象
import java.util.ArrayList;
public class ResultDao {
static ArrayList<Result> list=new ArrayList<Result>();
public static ArrayList<Result> getList() {
return list;
}
public static void setList(ArrayList<Result> list) {
ResultDao.list = list;
}
public static void add(Result result) {
// TODO Auto-generated method stub
list.add(result);
}
}
StartUI类:输入阶数k以及特殊方格的坐标
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
//import StudentBD.DBTest;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;
import java.awt.Font;
import javax.swing.JTextField;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.LayoutStyle.ComponentPlacement;
public class StartUI extends JFrame {
private JPanel contentPane;
private JTextField textField;
private JTextField textField_1;
private JTextField textField_2;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
StartUI frame = new StartUI();
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the frame.
*/
public StartUI() {
setTitle("请输入参数");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
JLabel lblNewLabel = new JLabel("输入阶数2^k");
lblNewLabel.setFont(new Font("宋体", Font.PLAIN, 18));
lblNewLabel.setToolTipText("");
textField = new JTextField();//添加文本框
textField.setFont(new Font("宋体", Font.PLAIN, 18));
textField.addActionListener(new ActionListener() {//文本框监听
public void actionPerformed(ActionEvent e) {
//String number = textField.getText();//获得字符串类型的数据
// System.out.println(number); //测试是否获得数据
}
});
textField.setColumns(10);
JButton btnNewButton = new JButton("填色");//添加签到按钮
btnNewButton.setFont(new Font("宋体", Font.PLAIN, 18));
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println(Integer.parseInt(textField.getText()));
System.out.println(Integer.parseInt(textField_1.getText()));
System.out.println(Integer.parseInt(textField_2.getText()));
ChessBoard cb=new ChessBoard();
cb.disPlay(0, 0,Integer.parseInt(textField_1.getText())-1,Integer.parseInt(textField_2.getText())-1,(int)Math.pow(2,Integer.parseInt(textField.getText())));
//textField.setText("");//清空文本
//textField.requestFocus();//聚焦标记
}
});
textField_1 = new JTextField();
textField_1.setFont(new Font("宋体", Font.PLAIN, 18));
textField_1.setColumns(10);
textField.addActionListener(new ActionListener() {//文本框监听
public void actionPerformed(ActionEvent e) {
//String number = textField.getText();//获得字符串类型的数据
// System.out.println(number); //测试是否获得数据
}
});
textField_2 = new JTextField();
textField_2.setFont(new Font("宋体", Font.PLAIN, 18));
textField_2.setColumns(10);
textField.addActionListener(new ActionListener() {//文本框监听
public void actionPerformed(ActionEvent e) {
//String number = textField.getText();//获得字符串类型的数据
// System.out.println(number); //测试是否获得数据
}
});
JLabel lblNewLabel_1 = new JLabel("输入特殊方块的行和列");
lblNewLabel_1.setToolTipText("");
lblNewLabel_1.setFont(new Font("宋体", Font.PLAIN, 18));
GroupLayout gl_contentPane = new GroupLayout(contentPane);
gl_contentPane.setHorizontalGroup(
gl_contentPane.createParallelGroup(Alignment.TRAILING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGroup(gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(23)
.addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 196, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(ComponentPlacement.RELATED)
.addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 58, GroupLayout.PREFERRED_SIZE)
.addGap(18)
.addComponent(textField_2, GroupLayout.PREFERRED_SIZE, 59, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(58)
.addComponent(lblNewLabel)
.addGap(36)
.addComponent(textField, GroupLayout.PREFERRED_SIZE, 156, GroupLayout.PREFERRED_SIZE))
.addGroup(gl_contentPane.createSequentialGroup()
.addGap(175)
.addComponent(btnNewButton)))
.addContainerGap(66, Short.MAX_VALUE))
);
gl_contentPane.setVerticalGroup(
gl_contentPane.createParallelGroup(Alignment.LEADING)
.addGroup(gl_contentPane.createSequentialGroup()
.addContainerGap(57, Short.MAX_VALUE)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel)
.addComponent(textField, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
.addGap(28)
.addGroup(gl_contentPane.createParallelGroup(Alignment.BASELINE)
.addComponent(lblNewLabel_1, GroupLayout.PREFERRED_SIZE, 21, GroupLayout.PREFERRED_SIZE)
.addComponent(textField_1, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE)
.addComponent(textField_2, GroupLayout.PREFERRED_SIZE, 27, GroupLayout.PREFERRED_SIZE))
.addGap(54)
.addComponent(btnNewButton)
.addGap(35))
);
contentPane.setLayout(gl_contentPane);
}
}
代码很烂,希望能帮到你