六爻八卦预测,是古人观察大自然运行规律总结出来的一项法则。起源于西汉京房的纳甲体系。起初是用50根蓍草,到宋朝时才有了“以钱代蓍”。预测人将三枚铜钱放于手中,双手紧扣,思其所测之事,让所测信息融贯于铜钱之中,合掌摇晃后放入卦盘中,掷六次而成卦。配以卦爻,及动变以后。通过测卦当日的干支,配以六亲及六兽,主要依靠用神的五行生旺,结合易经的爻辞,而判断事物的发展过程和结果。六爻是民间流传最广的预测方法之一,其变化有梅花易数,以及文王六十四卦的断法。相对于正宗的六爻断法又要简单许多。
1. 代码拆分
- 按钮布局
- 图片位置
- 生成卦图位置
- 卦象详解
- 资源(图片来源于网络,只用于学习)
jar包
卦解文件
 {
new Swing();
}
}
3. 界面类
package com.it.liuyi;
import javax.imageio.ImageIO;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.URL;
/**
* @author
* @version 1.0
*/
public class Swing extends JFrame implements ActionListener{
//内容面板
private JPanel contentPane;
private Image image;
JButton jbOk = new JButton("测算");
JButton jbExit =new JButton("退出");
JButton jButton = new JButton("重置");
// private String path = this.getClass().getResource("").getPath();
private URL url = Swing.class.getClassLoader().getResource("1.jpg");
private URL url1 = Swing.class.getResource("2.jpeg");
// InputStream input1= Swing.class.getResourceAsStream("2.jpeg");
//对窗口进行初始化
public Swing(){
System.out.println("path="+url1);
this.initFrame();
jbOk.addActionListener(this);
jbExit.addActionListener(this);
jButton.addActionListener(this);
}
/**
* 初始化窗口
*/
private void initFrame(){
InputStream input= Swing.class.getResourceAsStream("1.jpg");
//窗口标题
setTitle("六爻(算卦神器)");
//关闭退出
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//窗口大小
setSize(900,700);
//固定窗口大小
setResizable(false);
//设置窗口左上角位置,打开时在屏幕中间
setLocationRelativeTo(null);
// 内容面板
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
// 设置布局
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
JPanel panel = new JPanel(new GridLayout(5, 2, 5, 10));//5行1列的表格布局
panel.setBorder(new TitledBorder(null, "", TitledBorder.LEADING, TitledBorder.TOP, null, null));
contentPane.add(panel, BorderLayout.CENTER);//给panel添加边框
//确定按钮
JPanel panel_1 = new JPanel();
panel.add(panel_1);
panel_1.add(jbOk);
//退出按钮
JPanel panel_2 = new JPanel();
panel_2.add(jbExit);
panel.add(panel_2);
//重置
JPanel panel_3 = new JPanel();
panel_3.add(jButton);
panel.add(panel_3);
try {
image= ImageIO.read(input);
} catch (IOException e) {
e.printStackTrace();
}
setIconImage(image);
//窗口可见
setVisible(true);
}
public void paint(Graphics g) {
super.paint(g);
InputStream input1= Swing.class.getResourceAsStream("2.jpeg");
Image bj = null;
try {
bj = ImageIO.read(input1);
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(bj,95,370,this);
}
public void actionPerformed(ActionEvent e){
if (e.getSource()==jbOk){
System.out.println("被点击的");
update(getGraphics());
// myImg(getGraphics());
}else if (e.getSource()==jbExit){
System.out.println("程序退出");
System.exit(1);
}else if (e.getSource()==jButton){
System.out.println("重置窗口");
repaint();
}
}
@Override
public void update(Graphics g) {
super.update(g);
int[] result = Algorithm.random();
Graphics2D g2 = (Graphics2D) g;
g2.setStroke(new BasicStroke(12.0f));
int x = 100;
int y = 70;
Font font = new Font("黑体", Font.BOLD, 18);
g2.setFont(font);
g2.setColor(Color.red);
String str =FileRead.piPei(result);
String[] strings = str.split("\n");
g2.drawString(strings[0],x,80);
g2.drawString(strings[2],x+150,80);
for (int i = 0; i < result.length; i++) {
// int x1 = (i+1)*x;
int y1 = (i+1)*45+y;
switch (result[i]) {
case 6:
g2.setColor(Color.BLACK);
g2.drawLine(x, y1, x+100, y1);
g2.drawLine(x+150, y1, x+250, y1);
System.out.println("--" + "\t老阴");
break;
case 7:
g2.setColor(Color.red);
g2.drawLine(x, y1, x+250, y1);
System.out.println("——" + "\t少阳");
break;
case 8:
g2.setColor(Color.BLACK);
g2.drawLine(x, y1, x+100, y1);
g2.drawLine(x+150, y1, x+250, y1);
System.out.println("--" + "\t少阴");
break;
case 9:
g2.setColor(Color.red);
g2.drawLine(x, y1, x+250, y1);
System.out.println("——" + "\t老阳");
break;
}
}
String strLine = strings[3].substring(0,1);
int j=0;
g2.setColor(Color.black);
for (int i=1;i<strings[3].length();i++){
if (i%15==0){
g2.drawString(strLine,550,100+(j+1)*30);
j++;
strLine="";
}else {
strLine +=strings[3].substring(i,i+1);
}
}
}
}
4. 生成卦图算法类
package com.it.liuyi;
import java.util.Arrays;
import java.util.Random;
/**
* 生成六个随机数的算法
* @author
* @version 1.0
*/
public class Algorithm {
public static int[] random(){
int[] result = new int[6];
Random random = new Random();
for (int i=result.length-1;i>=0;i--){
// i-1
int num1 = 2+random.nextInt(2);
// System.out.println("num1="+num1);
// i-2
int num2 = 2+random.nextInt(2);
// System.out.println("num2="+num2);
// i-3
int num3 = 2+random.nextInt(2);
// System.out.println("num3="+num3);
result[i] = num1+num2+num3;
}
return result;
}
public static void main(String[] args) {
int[] result = random();
for (int i=0;i<result.length;i++){
switch (result[i]){
case 6:
System.out.println("--"+"\t老阴");
break;
case 7:
System.out.println("——"+"\t少阳");
break;
case 8:
System.out.println("--"+"\t少阴");
break;
case 9:
System.out.println("——"+"\t老阳");
break;
}
}
}
}
5. 读取卦解文件类
package com.it.liuyi;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import java.awt.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
/**
* @author
* @version 1.0
*/
public class FileRead {
private static URL url = Swing.class.getResource("64.xls");
public static String piPei(int[] result){
InputStream input= FileRead.class.getResourceAsStream("64.xls");
System.out.println("xlspath="+ url);
int i;
Sheet sheet;
Workbook workbook = null;
Cell cell1 = null,cell2 = null,celli,cellm = null,celln = null;
boolean flag =false;
try {
// workbook = Workbook.getWorkbook(new FileInputStream(String.valueOf(url)));
workbook = Workbook.getWorkbook(input);
sheet = workbook.getSheet(0);
i=1;
out:while (true){
in:for (int j=3;j<=8;j++){
celli = sheet.getCell(j,i);
int num = new Integer(celli.getContents());
if (num!=result[j-3]%2){
i++;
break ;
}
if (j==8){
flag=true;
}
}
if (flag){
cell1 = sheet.getCell(1,i);
cell2 = sheet.getCell(2,i);
cellm = sheet.getCell(9,i);
celln = sheet.getCell(10,i);
break ;
}
}
} catch (IOException e) {
e.printStackTrace();
} catch (BiffException e) {
e.printStackTrace();
}finally {
workbook.close();
}
return new StringBuilder(cell1.getContents()+"\n" +
cell2.getContents()+"\n"+
cellm.getContents()+"\n" +
celln.getContents()).toString();
}
public static void main(String[] args) {
int[] result = {6,6,6,6,6,6};
String str=piPei(result);
System.out.println(str);
}
}