|
- import java.awt.BorderLayout;
- import java.awt.GridLayout;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.io.DataInputStream;
- import java.io.DataOutputStream;
- import java.io.IOException;
- import javax.swing.JButton;
- import javax.swing.JLabel;
- import javax.swing.JPanel;
- import javax.swing.JSeparator;
- import javax.swing.JTabbedPane;
- import javax.swing.JTextArea;
- import javax.swing.SwingUtilities;
- import javax.swing.WindowConstants;
- import lejos.pc.comm.NXTConnector;
- import org.kociemba.twophase.Search;
- /**
- * This code was edited or generated using CloudGarden's Jigloo
- * SWT/Swing GUI Builder, which is free for non-commercial
- * use. If Jigloo is being used commercially (ie, by a corporation,
- * company or business for any purpose whatever) then you
- * should purchase a license for each developer using Jigloo.
- * Please visit www.cloudgarden.com for details.
- * Use of Jigloo implies acceptance of these licensing terms.
- * A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
- * THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
- * LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
- */
- public class NewJFrame extends javax.swing.JFrame implements ActionListener{
- {
- //Set Look & Feel
- try {
- javax.swing.UIManager.setLookAndFeel("javax.swing.plaf.nimbus.NimbusLookAndFeel");
- } catch(Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * Simple JavaDoc
- * @author Michael Peng
- * Set the Version of the main program
- */
- private static final long serialVersionUID = 6338002822670303714L;
- // console string
- private static final String con = null;
- private JLabel copyright;
- private JButton dT;
- private JButton dU;
- private JButton dD;
- private JButton uT;
- private JButton uU;
- private JButton uD;
- private JButton rT;
- private JButton rU;
- private JButton rD;
- private JButton fT;
- private JButton fU;
- private JButton fD;
- private JButton lT;
- private JButton lU;
- private JButton lD;
- private JButton bT;
- private JButton bU;
- private JButton bD;
- private JPanel dmov;
- private JPanel umov;
- private JPanel rmov;
- private JPanel fmov;
- private JPanel lmov;
- private JPanel bmov;
- private JTabbedPane actionspane;
- private JPanel Actions;
- private JSeparator jSeparator1;
- private JLabel Note;
- private JTextArea Cube;
- private JPanel CubePanel;
- private JButton solve;
- private JPanel jPanel1;
- private JLabel debug;
- private JButton test;
- private JButton disconnect;
- private JPanel ConnectionDebug;
- private JPanel mainPanel;
- private JButton connect;
- private JTabbedPane ActionPane;
- private JTextArea Console;
- private static NXTConnector conn = new NXTConnector();
- private DataOutputStream dos;
- private DataInputStream dis;
- /**
- * Auto-generated main method to display this JFrame
- */
- public static void main(String[] args) {
- SwingUtilities.invokeLater(new Runnable() {
- public void run() {
- NewJFrame inst = new NewJFrame();
- inst.setLocationRelativeTo(null);
- inst.setVisible(true);
- }
- });
- }
-
- public NewJFrame() {
- super();
- initGUI();
- }
-
- private void initGUI() {
- try {
- setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
- this.setTitle("MindCuber Console Pro v1.01");
- {
- mainPanel = new JPanel();
- getContentPane().add(mainPanel, BorderLayout.CENTER);
- mainPanel.setPreferredSize(new java.awt.Dimension(416, 330));
- {
- connect = new JButton();
- mainPanel.add(connect);
- connect.setText("Connect!");
- connect.setPreferredSize(new java.awt.Dimension(224, 37));
- connect.addActionListener(this);
- }
- {
- ActionPane = new JTabbedPane();
- mainPanel.add(ActionPane);
- mainPanel.add(getCopyright());
- ActionPane.setPreferredSize(new java.awt.Dimension(329, 255));
- {
- Console = new JTextArea(con);
- ActionPane.addTab("Console", null, Console, null);
- Console.setPreferredSize(new java.awt.Dimension(429, 226));
- ActionPane.addTab("Connection Debug", null, getConnectionDebug(), null);
- ActionPane.addTab("Cube", null, getJPanel1(), null);
- ActionPane.addTab("Actions", null, getActions(), null);
- }
- }
- }
- pack();
- this.setSize(432, 368);
- } catch (Exception e) {
- //add your error handling code here
- e.printStackTrace();
- }
- }
- private JPanel getConnectionDebug() {
- if(ConnectionDebug == null) {
- ConnectionDebug = new JPanel();
- ConnectionDebug.add(getDisconnect());
- ConnectionDebug.add(getTest());
- ConnectionDebug.add(getDebug());
- ConnectionDebug.add(getSolve());
- ConnectionDebug.add(getJSeparator1());
- }
- return ConnectionDebug;
- }
-
- private JButton getDisconnect() {
- if(disconnect == null) {
- disconnect = new JButton();
- disconnect.setText("Disconnect!");
- disconnect.setPreferredSize(new java.awt.Dimension(132, 71));
- disconnect.addActionListener(this);
- }
- return disconnect;
- }
-
- private JButton getTest() {
- if(test == null) {
- test = new JButton();
- test.setPreferredSize(new java.awt.Dimension(129, 71));
- test.setText("Test Connection!");
- test.addActionListener(this);
- }
- return test;
- }
-
- private JLabel getDebug() {
- if(debug == null) {
- debug = new JLabel();
- debug.setText("waiting...");
- debug.setPreferredSize(new java.awt.Dimension(234, 15));
- }
- return debug;
- }
- public void actionPerformed(ActionEvent e){
- Console.setLineWrap(true);
- if (e.getSource() == connect)
- {
- try {
- conn.connectTo();
- dos = new DataOutputStream(conn.getOutputStream());
- dis = new DataInputStream(conn.getInputStream());
- } catch (Exception e1) {
- e1.printStackTrace();
- }
- Console.setText("connected");
- }
- else if (e.getSource() == disconnect)
- {
- try {
- conn.close();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- Console.setText("Disconnected");
- }
- else if (e.getSource() == solve)
- {
- CubeStr(Cube.getText());
- }
- else if (e.getSource() == test)
- {
- try {
- sendInt(100);
- receInt();
- } catch (IOException e1) {
- Console.setText("Error while Sending/Receiving Int");
- System.err.println("Problems occured while testing connection. Please try again.");
- System.exit(0);
- }
- }
- }
-
- private JPanel getJPanel1() {
- if(jPanel1 == null) {
- jPanel1 = new JPanel();
- GridLayout jPanel1Layout = new GridLayout(1, 1);
- jPanel1Layout.setHgap(5);
- jPanel1Layout.setVgap(5);
- jPanel1Layout.setColumns(1);
- jPanel1.setLayout(jPanel1Layout);
- jPanel1.add(getCubePanel());
- }
- return jPanel1;
- }
- private JButton getSolve() {
- if(solve == null) {
- solve = new JButton();
- solve.setText("Solve that Cube!");
- solve.setPreferredSize(new java.awt.Dimension(183, 56));
- solve.addActionListener(this);
- }
- return solve;
-
- }
-
- private JPanel getCubePanel() {
- if(CubePanel == null) {
- CubePanel = new JPanel();
- CubePanel.add(getCube());
- CubePanel.add(getNote());
- }
- return CubePanel;
- }
-
- private JTextArea getCube() {
- if(Cube == null) {
- Cube = new JTextArea();
- Cube.setPreferredSize(new java.awt.Dimension(305, 180));
- }
- return Cube;
- }
-
- private JLabel getNote() {
- if(Note == null) {
- Note = new JLabel();
- Note.setText("Remember, the cube must be white face and blue up!");
- }
- return Note;
- }
-
- private JSeparator getJSeparator1() {
- if(jSeparator1 == null) {
- jSeparator1 = new JSeparator();
- jSeparator1.setPreferredSize(new java.awt.Dimension(212, 2));
- }
- return jSeparator1;
- }
-
- // I/O Methods
-
- private void sendInt(int i) throws IOException
- {
- dos.writeInt(i);
- dos.flush();
- Console.setText("Send:" + i);
- //Optional
- System.out.println("Send:"+i);
- }
-
- private void receInt() throws IOException
- {
- int i = dis.readInt();
- Console.setText("Receive:"+i);
- //Optional
- System.out.println("Receive:"+i);
- }
- //Cube Type Converter
-
- private void CubeStr(String input)
- {
- String[] cc = new String[54];
- String[] cd = new String[54];
- String Result = new String();
- for(int i=0;i<54;i++)
- {
- cc[i] = input.substring(i,i+1);
- System.out.print(cc[i] + ";");
- }
- /*
- * W F
- * Y B
- * G D
- * R R
- * O L
- * B U
- */
- for(int i=0;i<54;i++)
- {
- if (cc[i].equals("W"))
- {
- cd[i] = "F";
- }
- else if (cc[i].equals("Y"))
- {
- cd[i] = "B";
- }
- else if (cc[i].equals("G"))
- {
- cd[i] = "D";
- }
- else if (cc[i].equals("R"))
- {
- cd[i] = "R";
- }
- else if (cc[i].equals("O"))
- {
- cd[i] = "L";
- }
- else if (cc[i].equals("B"))
- {
- cd[i] = "U";
- }
- else
- {
- System.out.println("Unknown character(s) found:"+cc[i]);
- }
- }
- for(int i=0;i<54;i++)
- {
- Result += cd[i];
- }
- String sol = Search.solution(Result,20,20,false);
- System.out.println(Result);
- System.out.println(sol);
- }
- // Cube Actions
-
- private JPanel getActions() {
- if(Actions == null) {
- Actions = new JPanel();
- Actions.add(getActionspane());
- }
- return Actions;
- }
-
- private JTabbedPane getActionspane() {
- if(actionspane == null) {
- actionspane = new JTabbedPane();
- actionspane.setPreferredSize(new java.awt.Dimension(239, 206));
- actionspane.addTab("B", null, getBmov(), null);
- actionspane.addTab("L", null, getLmov(), null);
- actionspane.addTab("F", null, getFmov(), null);
- actionspane.addTab("R", null, getRmov(), null);
- actionspane.addTab("U", null, getUmov(), null);
- actionspane.addTab("D", null, getDmov(), null);
- }
- return actionspane;
- }
-
- private JPanel getBmov() {
- if(bmov == null) {
- bmov = new JPanel();
- bmov.setPreferredSize(new java.awt.Dimension(239, 110));
- bmov.add(getBD());
- bmov.add(getBU());
- bmov.add(getBT());
- }
- return bmov;
- }
-
- private JPanel getLmov() {
- if(lmov == null) {
- lmov = new JPanel();
- lmov.add(getLD());
- lmov.add(getLU());
- lmov.add(getLT());
- }
- return lmov;
- }
-
- private JPanel getFmov() {
- if(fmov == null) {
- fmov = new JPanel();
- fmov.add(getFD());
- fmov.add(getFU());
- fmov.add(getFT());
- }
- return fmov;
- }
-
- private JPanel getRmov() {
- if(rmov == null) {
- rmov = new JPanel();
- rmov.add(getRD());
- rmov.add(getRU());
- rmov.add(getRT());
- }
- return rmov;
- }
-
- private JPanel getUmov() {
- if(umov == null) {
- umov = new JPanel();
- umov.add(getUD());
- umov.add(getUU());
- umov.add(getUT());
- }
- return umov;
- }
-
- private JPanel getDmov() {
- if(dmov == null) {
- dmov = new JPanel();
- dmov.add(getDD());
- dmov.add(getDU());
- dmov.add(getDT());
- }
- return dmov;
- }
-
- private JButton getBD() {
- if(bD == null) {
- bD = new JButton();
- bD.setText("B");
- bD.setPreferredSize(new java.awt.Dimension(40, 30));
- }
- bD.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(1);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return bD;
- }
-
- private JButton getBU() {
- if(bU == null) {
- bU = new JButton();
- bU.setText("B'");
- }
- bU.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(2);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return bU;
- }
-
- private JButton getBT() {
- if(bT == null) {
- bT = new JButton();
- bT.setText("B2");
- }
- bT.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(1);
- receInt();
- sendInt(1);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return bT;
- }
-
- private JButton getLD() {
- if(lD == null) {
- lD = new JButton();
- lD.setText("L");
- }
- lD.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {// Change THIS!!
- try {
- sendInt(1);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return lD;
- }
-
- private JButton getLU() {
- if(lU == null) {
- lU = new JButton();
- lU.setText("L'");
- }
- lU.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {// Change THIS!!!
- try {
- sendInt(1);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return lU;
- }
-
- private JButton getLT() {
- if(lT == null) {
- lT = new JButton();
- lT.setText("L2");
- }
- lT.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- { //Change tHIS!!!
- try {
- sendInt(1);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return lT;
- }
-
- private JButton getFD() {
- if(fD == null) {
- fD = new JButton();
- fD.setText("F");
- }
- fD.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(3);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return fD;
- }
-
- private JButton getFU() {
- if(fU == null) {
- fU = new JButton();
- fU.setText("F'");
- }
- fU.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(4);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return fU;
- }
-
- private JButton getFT() {
- if(fT == null) {
- fT = new JButton();
- fT.setText("F2");
- }
- fT.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(3);
- receInt();
- sendInt(3);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return fT;
- }
-
- private JButton getRD() {
- if(rD == null) {
- rD = new JButton();
- rD.setText("R");
- }
- rD.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- { //Change THIS!!
- try {
- sendInt(1);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return rD;
- }
-
- private JButton getRU() {
- if(rU == null) {
- rU = new JButton();
- rU.setText("R'");
- }
- rU.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- { //Change THIS!!
- try {
- sendInt(1);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return rU;
- }
-
- private JButton getRT() {
- if(rT == null) {
- rT = new JButton();
- rT.setText("R2");
- }
- rT.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- { //Change THIS!!
- try {
- sendInt(1);
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return rT;
- }
-
- private JButton getUD() {
- if(uD == null) {
- uD = new JButton();
- uD.setText("U");
- }
- uD.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(5);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return uD;
- }
-
- private JButton getUU() {
- if(uU == null) {
- uU = new JButton();
- uU.setText("U'");
- }
- uU.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(6);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return uU;
- }
-
- private JButton getUT() {
- if(uT == null) {
- uT = new JButton();
- uT.setText("U2");
- }
- uT.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(5);
- receInt();
- sendInt(5);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return uT;
- }
-
- private JButton getDD() {
- if(dD == null) {
- dD = new JButton();
- dD.setText("D");
- }
- dD.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(7);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return dD;
- }
-
- private JButton getDU() {
- if(dU == null) {
- dU = new JButton();
- dU.setText("D'");
- }
- dU.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(8);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return dU;
- }
-
- private JButton getDT() {
- if(dT == null) {
- dT = new JButton();
- dT.setText("D2");
- }
- dT.addActionListener(new ActionListener() {
- public void actionPerformed(ActionEvent e)
- {
- try {
- sendInt(7);
- receInt();
- sendInt(7);
- receInt();
- } catch (IOException e1) {
- e1.printStackTrace();
- }
- }
- });
- return dT;
- }
-
- private JLabel getCopyright() {
- if(copyright == null) {
- copyright = new JLabel();
- copyright.setText("Powered by Michael Peng");
- }
- return copyright;
- }
- }
复制代码![](http://data:image/png;base64,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)
软件区用VB做的供解魔方机器人使用的程序更新至leJOS!
|
|