基于单片机的4*4*4光立方取模软件及相应的源码

总共3个版本

详细的代码注释有时间再写吧

对应的单片机电路图啥的有时间再整理

 

搬运的记得把我这文章地址打上

 

1.0版本(单面取模)

main.java

1 import java.io.File;
2 import java.io.FileWriter;
3 import java.io.IOException;
4 
5 public class main {
6     public static void main(String args[]) throws IOException{
7         frame f = new frame();
8     }
9 }
1.0版本 main.java

frame.java

import java.awt.*;
import static java.awt.SystemColor.text;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
import static javax.swing.JFrame.EXIT_ON_CLOSE;
import javax.swing.event.AncestorListener;

public class frame {
    String srcAdress;
    String code1,code2;
    int x = 0;
    int y = 0;
    String xHex;
    String yHex;
    Panel p;
    JFrame jf;
    JButton[][] jb = new JButton[4][4];
    boolean b[][] = new boolean[4][4];
    ArrayList<String> a1 = new ArrayList<String>();
    ArrayList<String> a2 = new ArrayList<String>();
    String fullString;
    Clipboard clipboard;
    JTextArea jt1,jt2;
    
    public frame() throws IOException {
        clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        int x = 700;
        int y = 600;
        jf = new JFrame("4*4*4光立方数组生成");
        jf.setVisible(true);
        Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
        int screenWidth = (int)screensize.getWidth();
        int screenHeight = (int)screensize.getHeight();
        p = new Panel();
        p.setLayout(new GridLayout(6,4));
        jf.add(p);
        jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
        button();
        for(int i = 0;i < 4;i++){
            for(int j = 0;j < 4;j++){
                b[i][j] = true;
            }
        }
        getHexSource();
        AddHexSourceUnclear();
        AddHexSourceClear();
        OutHexSource();
        textBox1();
        textBox2();
        jf.pack();
        jf.setBounds((screenWidth-x)/2,(screenHeight-y)/2,x,y);
    }
    
    public void button(){
        for(int i = 0;i < 4;i++){
            for(int j = 0;j < 4;j++){
                jb[i][j] = new JButton((i+1)+"-"+(j+1));
                p.add(jb[i][j]);
                jb[i][j].addActionListener(new ActionListener() {
                    @Override
                    public void actionPerformed(ActionEvent e) {
                        String command = e.getActionCommand();
                        int commandx = Integer.parseInt(command.substring(0,1));
                        int commandy = Integer.parseInt(command.substring(2));
                        commandx--;
                        commandy--;
                        if(b[commandx][commandy]){
                            jb[commandx][commandy].setBackground(Color.blue);
                        }else{
                            jb[commandx][commandy].setBackground(Color.white);
                        }
                        b[commandx][commandy] = !b[commandx][commandy];
                    }
                });
            }
        }
    }
    
    public void getHexSource(){
        JButton jB = new JButton("重置");
        p.add(jB);
        jB.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                for(int i = 0;i < 4;i++){
                    for(int j = 0;j < 4;j++){
                        jb[i][j].setBackground(Color.white);
                        b[i][j] = true;
                    }
                }
                a1.clear();
                a2.clear();
                jt1.setText("");
                jt2.setText("");
                code1 = "";
                code2 = "";
            }
        });
        
    }
    
    public void calSource(){
        x=0;
        y=0;
        for(int i = 0;i < 4;i++){
                    for(int j = 0;j < 4;j++){
                        if(i<2){
                            if(b[i][j]){
                                x += 1;
                                x = x << 1;
                            }else{
                                x = x << 1;
                            }
                        }else{
                            if(b[i][j]){
                                y += 1;
                                y = y << 1;
                            }else{
                                y = y << 1;
                            }
                        }
                    }
                }
                x = x>>1;
                y = y>>1;
    }
    
    public void AddHexSourceUnclear(){
        JButton jb = new JButton("添加代码(不清空)");
        p.add(jb);
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                calSource();
                cheakAddHex();
                try {
                    getcode(false);
                } catch (IOException ex) {
                }
                jt1.setText(code1);
                jt2.setText(code2);
            }
        });
    }
    
    public void AddHexSourceClear(){
        JButton jB = new JButton("添加代码(清空)");
        p.add(jB);
        jB.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                calSource();
                cheakAddHex();
                try {
                    getcode(false);
                } catch (IOException ex) {
                }
                jt1.setText(code1);
                jt2.setText(code2);
                for(int i = 0;i < 4;i++){
                    for(int j = 0;j < 4;j++){
                        jb[i][j].setBackground(Color.white);
                        b[i][j] = true;
                    }
                }
            }
        });
    }
    
    public void cheakAddHex(){
        if(x <= 16){
            xHex = "0x0" + Integer.toHexString(x);
        }else{
            xHex = "0x" + Integer.toHexString(x);
        }
        if(y <= 16){
            yHex = "0x0" + Integer.toHexString(y);
        }else{
            yHex = "0x" + Integer.toHexString(y);
        }
        a1.add(xHex);
        a2.add(yHex);
    }
    
    public void getcode(boolean b) throws IOException{
        code1 = "{";
        for(String s : a1){
            code1 += s + ",";
        }
        code1 += "0xff};";
        code2 = "{";
        for(String s : a2){
            code2 += s + ",";
        }
        code2 += "0xff};";
        fullString = code1+"\n"+code2;
        if(b){
            writeFile(fullString);
        }
    }
    
    public void OutHexSource() throws IOException{
        JButton jb = new JButton("输出代码");
        p.add(jb);
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                try {
                    fileInit();
                } catch (IOException ex) {
                    
                }
                System.out.print("{");
                try {
                    getcode(true);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                jt1.setText(code1);
                jt2.setText(code2);
            }
        });
    }
    public void fileInit() throws IOException{
        srcAdress = System.getProperty("user.dir");
        File f = new File(srcAdress+"\\代码.txt");
        if(!f.exists()){
            f.createNewFile();
        }
    }
    
    public void writeFile(String s) throws IOException{
        FileWriter fileWriter = new FileWriter(srcAdress+"\\代码.txt");
        fileWriter.write(s);
        fileWriter.close();
    }
    
    public void textBox1(){
        JButton jb = new JButton("复制a1代码");
        jt1 = new JTextArea();
        jt1.setToolTipText("a1代码");
        jt1.setLineWrap(true);
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jt1.selectAll();
                StringSelection selection = new StringSelection(jt1.getText());
                clipboard.setContents(selection, null);
            }
        });
        p.add(jt1);
        p.add(jb);
    }
    
    public void textBox2(){
        JButton jb = new JButton("复制a2代码");
        jt2 = new JTextArea();
        jt2.setToolTipText("a2代码");
        jt2.setLineWrap(true);
        jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                jt2.selectAll();
                StringSelection selection = new StringSelection(code2);
                clipboard.setContents(selection, null);
            }
        });
        p.add(jt2);
        p.add(jb);
    }
    
}
1.0版本 frame.java

构建的jar下载地址(百度网盘)(提取码:0000)

实在难看的界面

 

2.0版本(伪立体取模)

main.java(直接写在一个里了)

  1 import javax.swing.*;
  2 import java.awt.*;
  3 import java.awt.datatransfer.Clipboard;
  4 import java.awt.datatransfer.StringSelection;
  5 import java.awt.event.ActionEvent;
  6 import java.awt.event.ActionListener;
  7 import static java.lang.Integer.toHexString;
  8 import java.util.ArrayList;
  9 import java.util.Scanner;
 10 
 11 
 12 public class main {
 13     public static void main(String args[]){
 14         new frame();
 15     }
 16 }
 17 
 18 
 19 class frame{
 20     
 21     int x = 1000;//屏幕长度
 22     int y = 650;//屏幕宽度
 23     int HexA;
 24     int HexB;
 25     String HexAChecked;
 26     String HexBChecked;
 27     String command1;
 28     String command2;
 29     
 30     boolean copyCode[] = new boolean[4];
 31     boolean bool[][][] = new boolean[4][4][4];
 32     String code1[] = new String[4];
 33     String code2[] = new String[4];
 34     String codeString[][] = new String[2][4];
 35     
 36     ArrayList<String> a1 = new ArrayList<String>();
 37     ArrayList<String> a2 = new ArrayList<String>();
 38     
 39     ArrayList<String> b1 = new ArrayList<String>();
 40     ArrayList<String> b2 = new ArrayList<String>();
 41     
 42     ArrayList<String> c1 = new ArrayList<String>();
 43     ArrayList<String> c2 = new ArrayList<String>();
 44     
 45     ArrayList<String> d1 = new ArrayList<String>();
 46     ArrayList<String> d2 = new ArrayList<String>();
 47     //存生成的代码
 48     
 49     Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();//剪切板
 50     
 51     JFrame jf = new JFrame("4*4*4光立方取模");
 52     Panel p = new Panel();
 53     Panel p1 = new Panel();//放灯
 54     Panel p2 = new Panel();//放按钮
 55     Panel p3 = new Panel();//放代码
 56     JButton jb[][][] = new JButton[4][4][4];//灯的按钮
 57     JButton jbS[][] = new JButton[4][4];//快捷按钮
 58     JButton jbD[] = new JButton[4];//基本按钮
 59     JButton jbC[] = new JButton[4];//复制按钮
 60     JTextArea jt[] = new JTextArea[4];//实时显示生成的代码
 61     
 62     StringSelection selection[] = new StringSelection[4];
 63     
 64     Color blue = new Color(51,204,255);
 65     Color flesh = new Color(255,175,122);
 66     
 67     
 68     public frame() {
 69         frameInit();
 70         lightButtonInit();
 71         shortcutButtonInit();
 72         buttonInit();
 73         textAreaInit();
 74                 
 75         jf.setVisible(true);
 76     }
 77     
 78     //重置数组
 79     public void resetBool(){
 80         for(int i1 = 0;i1 < 4;i1++){
 81             for(int i2 = 0;i2 < 4;i2++){
 82                 for(int i3 = 0;i3 < 4;i3++){
 83                     bool[i1][i2][i3] = false;
 84                 }
 85             }
 86         }
 87     }
 88     
 89     //重置按钮颜色和数组
 90     public void resetButton(){
 91         for(int i1 = 0;i1 < 4;i1++){
 92             for(int i2 = 0;i2 < 4;i2++){
 93                 for(int i3 = 0;i3 < 4;i3++){
 94                     if(bool[i1][i2][i3]){
 95                         jb[i1][i2][i3].setBackground(blue);
 96                     }else{
 97                         jb[i1][i2][i3].setBackground(flesh);
 98                     }
 99                     
100                 }
101             }
102         }
103     }
104     
105     //重置文本框
106     public void resetTextArea(){
107         for(int i1 = 0;i1 < 4;i1++){
108             jt[i1].setText("");
109         }
110     }
111     
112     //初始化框架
113     public void frameInit(){
114         
115         Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
116         int screenWidth = (int)screensize.getWidth();
117         int screenHeight = (int)screensize.getHeight();
118         jf.setBounds((screenWidth-x)/2,(screenHeight-y)/2,x,y);
119         jf.setDefaultCloseOperation(3);
120         jf.setLayout(null);
121         jf.setResizable(false);
122         
123         p.setBounds(0, 0, x, y);
124         jf.add(p);
125         p.setLayout(null);
126         p.setBackground(Color.DARK_GRAY);
127         
128         p1.setLayout(null);
129         //p1.setBackground(Color.red);
130         p1.setBounds(30, 30, 930, 250);
131         p.add(p1);
132         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
133         
134         
135         p2.setLayout(new GridLayout(2,8));
136         //p2.setBackground(Color.green);
137         p2.setBounds(30, 290, 930, 100);
138         p.add(p2);
139         
140         p3.setLayout(null);
141         //p3.setBackground(Color.blue);
142         p3.setBounds(30, 400, 930, 170);
143         p.add(p3);
144         jf.setResizable(false);
145     }
146     
147     //初始化灯按钮
148     public void lightButtonInit(){
149         for(int i1 = 0;i1 < 4;i1++){
150             for(int i2 = 0;i2 < 4;i2++){
151                 for(int i3 = 0;i3 < 4;i3++){
152                     jb[i1][i2][i3] = new JButton();
153                     jb[i1][i2][i3].setActionCommand("jb "+ (i1+1) + "-" + (i2+1) + "-" + (i3+1));
154                     jb[i1][i2][i3].setBackground(flesh);
155                     jb[i1][i2][i3].setBounds( 40+ (i1*4+i3)*50 + i1*20,210 - i2*50 - i3 * 20, 40, 40);
156                     p1.add(jb[i1][i2][i3]);
157                     addActionListener(jb[i1][i2][i3]);
158                 }
159             }
160         }
161     }
162     
163     //初始化快捷键按钮 全亮 , 全暗 , 复制到下一面,复制到上一面
164     public void shortcutButtonInit(){
165         for(int i1 = 0;i1 < 4;i1++){
166             jbS[i1][0] = new JButton("全亮");
167             jbS[i1][1] = new JButton("全灭");
168             jbS[i1][2] = new JButton("复制到上一面");
169             jbS[i1][3] = new JButton("复制到下一面");
170             p2.add(jbS[i1][0]);
171             p2.add(jbS[i1][1]);
172             for(int i2 = 0;i2<4;i2++){
173                 addActionListener(jbS[i1][i2]);
174                 jbS[i1][i2].setActionCommand("jbS " + i1 + "-" + i2);
175             }
176         }
177         for(int i1 = 0;i1 < 4;i1++){
178             p2.add(jbS[i1][2]);
179             p2.add(jbS[i1][3]);
180         }
181         jbS[0][2].setEnabled(false);
182         jbS[3][3].setEnabled(false);
183     }
184     
185     //初始化按钮 添加,取模,清空,重置
186     public void buttonInit(){
187         jbD[0] = new JButton("添加");
188         jbD[0].setBounds(695, 20, 100, 90);
189         
190         jbD[1] = new JButton("取模");
191         jbD[1].setBounds(805, 20, 100, 90);
192         
193         jbD[2] = new JButton("清空");
194         jbD[2].setBounds(698, 130, 100, 30);
195         
196         jbD[3] = new JButton("重置");
197         jbD[3].setBounds(805, 130, 100, 30);
198         for(int i1 = 0;i1 < 4;i1++){
199             jbD[i1].setActionCommand("jbD "+i1);
200             p3.add(jbD[i1]);
201             addActionListener(jbD[i1]);
202         }
203     }
204     
205     //初始化文字输出框 1, 2, 3, 4,复制按钮
206     public void textAreaInit(){
207         for(int i1 = 0;i1 < 4;i1++){
208             jt[i1] = new JTextArea();
209             jt[i1].setBounds(5, 8+ 40*i1, 645, 35);
210             p3.add(jt[i1]);
211         }
212         for(int i1 = 0;i1 < 4;i1++){
213             jbC[i1] = new JButton("复制");
214             jbC[i1].setActionCommand("jbC " + i1);
215             jbC[i1].setBounds(650, 8+ 40*i1, 35, 35);
216             p3.add(jbC[i1]);
217             addActionListener(jbC[i1]);
218         }
219     }
220     
221     //初始化剪切板
222     public void selectionInit(int i){
223         selection[i] = new StringSelection(jt[i].getText());
224     }
225     
226     //显示于文本框
227     public void display(){
228         addHexCode();
229         for(int i = 0;i<4;i++){
230             jt[i].setText(code1[i] + "\n" + code2[i]);
231         }
232     }
233     
234     //复制到下一面
235     public void copyDown(int n){
236         for(int i1 = 0;i1<4;i1++){
237             for(int i2 = 0;i2<4;i2++){
238                 bool[n+1][i1][i2] = bool[n][i1][i2];
239             }
240         }
241         resetButton();
242     }
243     
244     //复制到上一面
245     public void copyUp(int n){
246         for(int i1 = 0;i1<4;i1++){
247             for(int i2 = 0;i2<4;i2++){
248                 bool[n-1][i1][i2] = bool[n][i1][i2];
249             }
250         }
251         resetButton();
252     }
253     
254     //单面亮暗
255     public void lightOrDark(boolean b,int page){
256         for(int i1 = 0;i1<4;i1++){
257             for(int i2 = 0;i2<4;i2++){
258                 bool[page][i1][i2] = b;
259             }
260         }
261         resetButton();
262     }
263     
264     //按钮事件监听
265     public void addActionListener(JButton saveButton) {
266         
267         saveButton.addActionListener(new ActionListener() {
268             @Override
269             public void actionPerformed(ActionEvent e) {
270                 String command;
271                 command = e.getActionCommand();
272                 //System.out.println(command);
273                 Scanner sc = new Scanner(command);
274                 command1 = sc.next();
275                 command2 = sc.next();
276                 switch(command1){
277                     case "jb": 
278                         int a,b,c;
279                         a = Integer.parseInt(command2.substring(0,1));
280                         b = Integer.parseInt(command2.substring(2,3));
281                         c = Integer.parseInt(command2.substring(4));
282                         a--;
283                         b--;
284                         c--;
285                         if(bool[a][b][c]){
286                             jb[a][b][c].setBackground(flesh);
287                         }else{
288                             jb[a][b][c].setBackground(blue);
289                         }
290                         bool[a][b][c] = !bool[a][b][c];//变蓝色后存true;
291                         //System.out.println(bool[a][b][c]);
292                         break;
293                         
294                     case "jbS": 
295                         int page = Integer.parseInt(command2.substring(0,1));
296                         int id = Integer.parseInt(command2.substring(2));
297                         
298                         System.out.println(page + " " + id);
299                         switch(id){
300                             //全亮
301                             case 0:
302                                 lightOrDark(true,page);
303                                 break;
304                             //全灭
305                             case 1:
306                                 lightOrDark(false,page);
307                                 break;
308                             //复制到上一面
309                             case 2:
310                                 copyUp(page);
311                                 break;
312                             //复制到下一面
313                             case 3:
314                                 copyDown(page);
315                                 break;
316                         }
317                         break;
318                         
319                     case "jbD": 
320                         switch(Integer.parseInt(command2)){
321                             //添加
322                             case 0:
323                                 calAddHexCode();
324                                 display();
325                                 break;
326                             //取模
327                             case 1:
328                                 
329                                 break;
330                             //清空
331                             case 2:
332                                 resetBool();
333                                 resetButton();
334                                 break;
335                             //重置
336                             case 3:
337                                 resetTextArea();
338                                 resetBool();
339                                 resetButton();
340                                 a1.clear();
341                                 a2.clear();
342                                 b1.clear();
343                                 b2.clear();
344                                 c1.clear();
345                                 c2.clear();
346                                 d1.clear();
347                                 d2.clear();
348                                 break;
349                         }
350                         break;
351                         
352                     case "jbC": 
353                         int i = Integer.parseInt(command2);
354                         selectionInit(i);
355                         clipboard.setContents(selection[i], null);
356                         break;
357                         
358                 }
359                 
360                 sc.close();
361                 
362             }
363         });
364     }
365     
366     //计算所有的Hex代码
367     public void calAddHexCode(){
368         for(int i2 = 0;i2 < 4;i2++){
369             HexA = 0;
370             HexB = 0;
371             for(int i1 = 0;i1 < 4;i1++){
372                 for(int i3 = 0;i3 < 4;i3++){
373                     if(i1<2){
374                         if(!bool[i1][i2][i3]){
375                             HexA += 1;
376                             HexA = HexA << 1;
377                         }else{
378                             HexA = HexA << 1;
379                         }
380                     }else{
381                         if(!bool[i1][i2][i3]){
382                             HexB += 1;
383                             HexB = HexB << 1;
384                         }else{
385                             HexB = HexB << 1;
386                         }
387                     }
388                 }
389             }
390             HexA = HexA >> 1;
391             HexB = HexB >> 1;
392             //System.out.println(HexA + " " + HexB);
393             //System.out.println(toHexString(HexA) + " " + toHexString(HexB) );
394             checkHexCode();
395             switch(i2){
396                 case 0: 
397                     a1.add(HexAChecked);
398                     a2.add(HexBChecked);
399                     break;
400                     
401                 case 1: 
402                     b1.add(HexAChecked);
403                     b2.add(HexBChecked);
404                     break;
405                     
406                 case 2: 
407                     c1.add(HexAChecked);
408                     c2.add(HexBChecked);
409                     break;
410                     
411                 case 3: 
412                     d1.add(HexAChecked);
413                     d2.add(HexBChecked);
414                     break;
415             }
416         }
417     }
418     
419     //核对Hex代码规范格式
420     public void checkHexCode(){
421         if(HexA <= 16){
422             HexAChecked = "0x0" + Integer.toHexString(HexA);
423         }else{
424             HexAChecked = "0x" + Integer.toHexString(HexA);
425         }
426         if(HexB <= 16){
427             HexBChecked = "0x0" + Integer.toHexString(HexB);
428         }else{
429             HexBChecked = "0x" + Integer.toHexString(HexB);
430         }
431         System.out.println(HexAChecked + " " + HexBChecked);
432     }
433     
434     //叠加所有的Hex代码
435     public void addHexCode(){
436         for(int i = 0;i < 4;i++){
437             code1[i] = "{";
438         }
439         for(int i = 0;i < 4;i++){
440             code2[i] = "{";
441         }
442         
443         for(String s : a1){
444             code1[0] += s + ",";
445         }
446         for(String s : a2){
447             code2[0] += s + ",";
448         }
449         for(String s : b1){
450             code1[1] += s + ",";
451         }
452         for(String s : b2){
453             code2[1] += s + ",";
454         }
455         for(String s : c1){
456             code1[2] += s + ",";
457         }
458         for(String s : c2){
459             code2[2] += s + ",";
460         }
461         for(String s : d1){
462             code1[3] += s + ",";
463         }
464         for(String s : d2){
465             code2[3] += s + ",";
466         }
467         
468         for(int i = 0;i < 4;i++){
469             code1[i] += "0xff};";
470             
471         }
472         for(int i = 0;i < 4;i++){
473             code2[i] += "0xff};";
474         }
475     }
476 }
View Code

构建的jar下载地址(百度网盘)(提取码:0000)

不那么难看的界面

 

 2.1版本(伪立体取模)(更改了生成的代码,keil里仅需写好2个循环)

main.java

  1 import javax.swing.*;
  2 import java.awt.*;
  3 import java.awt.datatransfer.Clipboard;
  4 import java.awt.datatransfer.StringSelection;
  5 import java.awt.event.ActionEvent;
  6 import java.awt.event.ActionListener;
  7 import java.awt.event.KeyAdapter;
  8 import java.awt.event.KeyEvent;
  9 import java.awt.event.KeyListener;
 10 import static java.lang.Integer.toHexString;
 11 import java.util.ArrayList;
 12 import java.util.Scanner;
 13 
 14 
 15 public class main {
 16     public static void main(String args[]){
 17         new frame();
 18     }
 19 }
 20 
 21 
 22 class frame{
 23     
 24     int x = 1000;//屏幕长度
 25     int y = 650;//屏幕宽度
 26     int HexA;
 27     int HexB;
 28     String HexAChecked;
 29     String HexBChecked;
 30     String command1;
 31     String command2;
 32     String AStart = "code uint lightA[]=";
 33     String BStart = "code uint lightB[]=";
 34     
 35     boolean copyCode[] = new boolean[4];
 36     boolean bool[][][] = new boolean[4][4][4];
 37     String codeA;
 38     String codeB;
 39     String codeString[][] = new String[2][4];
 40     
 41     ArrayList<String> lightA = new ArrayList<String>();
 42     ArrayList<String> lightB = new ArrayList<String>();
 43     
 44     //存生成的代码
 45     
 46     Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();//剪切板
 47     
 48     JFrame jf = new JFrame("4*4*4光立方取模");
 49     Panel p = new Panel();
 50     Panel p1 = new Panel();//放灯
 51     Panel p2 = new Panel();//放按钮
 52     Panel p3 = new Panel();//放代码
 53     JButton jb[][][] = new JButton[4][4][4];//灯的按钮
 54     JButton jbS[][] = new JButton[4][4];//快捷按钮
 55     JButton jbD[] = new JButton[4];//基本按钮
 56     JTextArea jt[] = new JTextArea[2];//实时显示生成的代码
 57     
 58     StringSelection selection;
 59     
 60     Color blue = new Color(51,204,255);
 61     Color flesh = new Color(255,175,122);
 62     Color lightCoral = new Color(240,128,128);
 63     
 64     
 65     public frame() {
 66         frameInit();
 67         lightButtonInit();
 68         shortcutButtonInit();
 69         buttonInit();
 70         textAreaInit();
 71         
 72         jf.setVisible(true);
 73     }
 74     
 75     //重置数组
 76     public void resetBool(){
 77         for(int i1 = 0;i1 < 4;i1++){
 78             for(int i2 = 0;i2 < 4;i2++){
 79                 for(int i3 = 0;i3 < 4;i3++){
 80                     bool[i1][i2][i3] = false;
 81                 }
 82             }
 83         }
 84     }
 85     
 86     //重置按钮颜色和数组
 87     public void resetButton(){
 88         for(int i1 = 0;i1 < 4;i1++){
 89             for(int i2 = 0;i2 < 4;i2++){
 90                 for(int i3 = 0;i3 < 4;i3++){
 91                     if(bool[i1][i2][i3]){
 92                         jb[i1][i2][i3].setBackground(blue);
 93                     }else{
 94                         jb[i1][i2][i3].setBackground(flesh);
 95                     }
 96                     
 97                 }
 98             }
 99         }
100     }
101     
102     //重置文本框
103     public void resetTextArea(){
104         for(int i1 = 0;i1 < 2;i1++){
105             jt[i1].setText("");
106         }
107     }
108     
109     //初始化框架
110     public void frameInit(){
111         
112         Dimension screensize = Toolkit.getDefaultToolkit().getScreenSize();
113         int screenWidth = (int)screensize.getWidth();
114         int screenHeight = (int)screensize.getHeight();
115         jf.setBounds((screenWidth-x)/2,(screenHeight-y)/2,x,y);
116         jf.setDefaultCloseOperation(3);
117         jf.setLayout(null);
118         jf.setResizable(false);
119         
120         p.setBounds(0, 0, x, y);
121         jf.add(p);
122         p.setLayout(null);
123         p.setBackground(Color.DARK_GRAY);
124         
125         p1.setLayout(null);
126         //p1.setBackground(Color.red);
127         p1.setBounds(30, 30, 930, 250);
128         p.add(p1);
129         jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
130         
131         
132         p2.setLayout(new GridLayout(2,8));
133         //p2.setBackground(Color.green);
134         p2.setBounds(30, 290, 930, 100);
135         p.add(p2);
136         
137         p3.setLayout(null);
138         //p3.setBackground(Color.blue);
139         p3.setBounds(30, 400, 930, 170);
140         p.add(p3);
141         jf.setResizable(false);
142     }
143     
144     //初始化灯按钮
145     public void lightButtonInit(){
146         for(int i1 = 0;i1 < 4;i1++){
147             for(int i2 = 0;i2 < 4;i2++){
148                 for(int i3 = 0;i3 < 4;i3++){
149                     jb[i1][i2][i3] = new JButton();
150                     jb[i1][i2][i3].setActionCommand("jb "+ (i1+1) + "-" + (i2+1) + "-" + (i3+1));
151                     jb[i1][i2][i3].setBackground(flesh);
152                     jb[i1][i2][i3].setBounds( 40+ (i1*4+i3)*50 + i1*20,210 - i2*50 - i3 * 20, 40, 40);
153                     p1.add(jb[i1][i2][i3]);
154                     addActionListener(jb[i1][i2][i3]);
155                 }
156             }
157         }
158     }
159     
160     //初始化快捷键按钮 全亮 , 全暗 , 复制到下一面,复制到上一面
161     public void shortcutButtonInit(){
162         for(int i1 = 0;i1 < 4;i1++){
163             jbS[i1][0] = new JButton("全亮");
164             jbS[i1][1] = new JButton("全灭");
165             jbS[i1][2] = new JButton("复制到上一面");
166             jbS[i1][3] = new JButton("复制到下一面");
167             p2.add(jbS[i1][0]);
168             p2.add(jbS[i1][1]);
169             for(int i2 = 0;i2<4;i2++){
170                 addActionListener(jbS[i1][i2]);
171                 jbS[i1][i2].setActionCommand("jbS " + i1 + "-" + i2);
172             }
173         }
174         for(int i1 = 0;i1 < 4;i1++){
175             p2.add(jbS[i1][2]);
176             p2.add(jbS[i1][3]);
177         }
178         //jbS[0][2].setEnabled(false);
179         //jbS[3][3].setEnabled(false);
180     }
181     
182     //初始化按钮 添加,取模,清空,重置
183     public void buttonInit(){
184         jbD[0] = new JButton("添加");
185         jbD[0].setBounds(695, 20, 100, 90);
186         
187         jbD[1] = new JButton("取模");
188         jbD[1].setBounds(805, 20, 100, 90);
189         
190         jbD[2] = new JButton("清空");
191         jbD[2].setBounds(695, 130, 100, 30);
192         
193         jbD[3] = new JButton("重置");
194         jbD[3].setBounds(805, 130, 100, 30);
195         for(int i1 = 0;i1 < 4;i1++){
196             jbD[i1].setActionCommand("jbD "+i1);
197             p3.add(jbD[i1]);
198             addActionListener(jbD[i1]);
199         }
200     }
201     
202     //初始化文字输出框 复制按钮
203     public void textAreaInit(){
204         for(int i1 = 0;i1 < 2;i1++){
205             jt[i1] = new JTextArea();
206             jt[i1].setBounds(5, 8+ 85*i1, 645, 80);
207             jt[i1].setLineWrap(true);
208             jt[i1].setAutoscrolls(true);
209             jt[i1].setBackground(lightCoral);
210             p3.add(jt[i1]);
211         }   
212     }
213     
214     //初始化剪切板
215     public void selectionInit(){
216         selection = new StringSelection(jt[0].getText() + "\n" + jt[1].getText());
217     }
218     
219     //显示于文本框
220     public void display(){
221         addHexCode();
222         jt[0].setText(codeA);
223         jt[1].setText(codeB);
224     }
225     
226     //复制到下一面
227     public void copyDown(int n){
228         if(n!=3){
229             for(int i1 = 0;i1<4;i1++){
230                 for(int i2 = 0;i2<4;i2++){
231                     bool[n+1][i1][i2] = bool[n][i1][i2];
232                 }
233             }
234         }else{
235             for(int i1 = 0;i1<4;i1++){
236                 for(int i2 = 0;i2<4;i2++){
237                     bool[0][i1][i2] = bool[n][i1][i2];
238                 }
239             }
240         }
241         
242         resetButton();
243     }
244     
245     //复制到上一面
246     public void copyUp(int n){
247         if(n!=0){
248             for(int i1 = 0;i1<4;i1++){
249                 for(int i2 = 0;i2<4;i2++){
250                     bool[n-1][i1][i2] = bool[n][i1][i2];
251                 }
252             }
253         }else{
254             for(int i1 = 0;i1<4;i1++){
255                 for(int i2 = 0;i2<4;i2++){
256                     bool[3][i1][i2] = bool[n][i1][i2];
257                 }
258             }
259         }
260         resetButton();
261     }
262     
263     //单面亮暗
264     public void lightOrDark(boolean b,int page){
265         for(int i1 = 0;i1<4;i1++){
266             for(int i2 = 0;i2<4;i2++){
267                 bool[page][i1][i2] = b;
268             }
269         }
270         resetButton();
271     }
272     
273     //按钮事件监听
274     public void addActionListener(JButton saveButton) {
275         
276         saveButton.addActionListener(new ActionListener() {
277             @Override
278             public void actionPerformed(ActionEvent e) {
279                 String command;
280                 command = e.getActionCommand();
281                 //System.out.println(command);
282                 Scanner sc = new Scanner(command);
283                 command1 = sc.next();
284                 command2 = sc.next();
285                 switch(command1){
286                     case "jb": 
287                         int a,b,c;
288                         a = Integer.parseInt(command2.substring(0,1));
289                         b = Integer.parseInt(command2.substring(2,3));
290                         c = Integer.parseInt(command2.substring(4));
291                         a--;
292                         b--;
293                         c--;
294                         if(bool[a][b][c]){
295                             jb[a][b][c].setBackground(flesh);
296                         }else{
297                             jb[a][b][c].setBackground(blue);
298                         }
299                         bool[a][b][c] = !bool[a][b][c];//变蓝色后存true;
300                         //System.out.println(bool[a][b][c]);
301                         break;
302                         
303                     case "jbS": 
304                         int page = Integer.parseInt(command2.substring(0,1));
305                         int id = Integer.parseInt(command2.substring(2));
306                         
307                         //System.out.println(page + " " + id);
308                         switch(id){
309                             //全亮
310                             case 0:
311                                 lightOrDark(true,page);
312                                 break;
313                             //全灭
314                             case 1:
315                                 lightOrDark(false,page);
316                                 break;
317                             //复制到上一面
318                             case 2:
319                                 copyUp(page);
320                                 break;
321                             //复制到下一面
322                             case 3:
323                                 copyDown(page);
324                                 break;
325                         }
326                         break;
327                         
328                     case "jbD": 
329                         switch(Integer.parseInt(command2)){
330                             //添加
331                             case 0:
332                                 calAddHexCode();
333                                 display();
334                                 break;
335                             //取模
336                             case 1:
337                                 selectionInit();
338                                 clipboard.setContents(selection, null);
339                                 break;
340                             //清空
341                             case 2:
342                                 resetBool();
343                                 resetButton();
344                                 break;
345                             //重置
346                             case 3:
347                                 resetTextArea();
348                                 resetBool();
349                                 resetButton();
350                                 lightA.clear();
351                                 lightB.clear();
352                                 break;
353                         }
354                         break;
355                 }
356                 
357                 sc.close();
358                 
359             }
360         });
361     }
362     
363     //计算所有的Hex代码
364     public void calAddHexCode(){
365         for(int i2 = 0;i2 < 4;i2++){
366             HexA = 0;
367             HexB = 0;
368             for(int i1 = 0;i1 < 4;i1++){
369                 for(int i3 = 0;i3 < 4;i3++){
370                     if(i1<2){
371                         if(!bool[i1][i2][i3]){
372                             HexA += 1;
373                             HexA = HexA << 1;
374                         }else{
375                             HexA = HexA << 1;
376                         }
377                     }else{
378                         if(!bool[i1][i2][i3]){
379                             HexB += 1;
380                             HexB = HexB << 1;
381                         }else{
382                             HexB = HexB << 1;
383                         }
384                     }
385                 }
386             }
387             HexA = HexA >> 1;
388             HexB = HexB >> 1;
389             //System.out.println(HexA + " " + HexB);
390             //System.out.println(toHexString(HexA) + " " + toHexString(HexB) );
391             checkHexCode();
392             lightA.add(HexAChecked);
393             lightB.add(HexBChecked);
394         }
395     }
396     
397     //核对Hex代码规范格式
398     public void checkHexCode(){
399         if(HexA <= 16){
400             HexAChecked = "0x0" + Integer.toHexString(HexA);
401         }else{
402             HexAChecked = "0x" + Integer.toHexString(HexA);
403         }
404         if(HexB <= 16){
405             HexBChecked = "0x0" + Integer.toHexString(HexB);
406         }else{
407             HexBChecked = "0x" + Integer.toHexString(HexB);
408         }
409         //System.out.println(HexAChecked + " " + HexBChecked);
410     }
411     
412     //叠加所有的Hex代码
413     public void addHexCode(){
414         codeA = AStart + " \n{";
415         codeB = BStart + " \n{";
416         
417         for(String s : lightA){
418             codeA += s + ",";
419         }
420         for(String s : lightB){
421             codeB += s + ",";
422         }
423         codeA += "0xff};";
424         codeB += "0xff};";
425     }
426 }
View Code

构建的jar下载地址(百度网盘)(提取码:0000)

也许更好看了点的界面

 

 

之后估计还会再再搞其他版本,觉得还行就点个赞吧ORZ,有啥意见评论下

posted @ 2020-08-22 21:56  AnyWriter  阅读(471)  评论(0编辑  收藏  举报
本文版权归作者:@ AnyWriter 所有,欢迎转载,转载必须清楚标注原文地址,否则保留追究法律责任的权利。