package Visualizer; import javax.swing.border.Border; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.IOException; import CognitiveModel.ModelFiles.*; public class visualizer { JFrame frame = new JFrame(); JPanel frameBottom = new JPanel(); JPanel controlDisplay = new JPanel(); JPanel modelDisplay = new JPanel(); JTextArea modelQueue = new JTextArea(); JTextArea modelVision = new JTextArea(); JPanel mainDisplay = new JPanel(); JPanel visualizer = new JPanel(); JPanel yokeGrid = new JPanel(); axis axis = new axis(0,0); rudderPosition rudderGrid = new rudderPosition(yokeGrid.getWidth(), 0); yokePosition yoke = new yokePosition(yokeGrid.getWidth(), yokeGrid.getHeight()); JLabel one = new JLabel(); JLabel two = new JLabel(); JLabel three = new JLabel(); JLabel four = new JLabel(); Model m; public visualizer(Model m){ this.m = m; } public void initializeDisplay() { try { UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel"); } catch(Exception ignored){} frame.setPreferredSize(new Dimension(1700,270)); frame.setLayout(new BorderLayout()); frameBottom.setLayout(new GridLayout(1,2)); frame.setVisible(true); controlDisplay.setPreferredSize(new Dimension(100,100)); controlDisplay.setLayout(new GridLayout(2,4)); Font fontTitles = new Font("Impact", 1,40); Font fontData = new Font("Monospaced", 1,30); JLabel titleOne = new JLabel("Elevator"); titleOne.setFont(fontTitles); titleOne.setHorizontalAlignment(SwingConstants.CENTER); titleOne.setVerticalAlignment(SwingConstants.BOTTOM); JLabel titleTwo = new JLabel("Roll"); titleTwo.setFont(fontTitles); titleTwo.setHorizontalAlignment(SwingConstants.CENTER); titleTwo.setVerticalAlignment(SwingConstants.BOTTOM); JLabel titleThree = new JLabel("Yaw"); titleThree.setFont(fontTitles); titleThree.setHorizontalAlignment(SwingConstants.CENTER); titleThree.setVerticalAlignment(SwingConstants.BOTTOM); JLabel titleFour = new JLabel("Throttle"); titleFour.setFont(fontTitles); titleFour.setHorizontalAlignment(SwingConstants.CENTER); titleFour.setVerticalAlignment(SwingConstants.BOTTOM); one = new JLabel(); one.setFont(fontData); one.setHorizontalAlignment(SwingConstants.CENTER); one.setVerticalAlignment(SwingConstants.TOP); two = new JLabel(); two.setFont(fontData); two.setHorizontalAlignment(SwingConstants.CENTER); two.setVerticalAlignment(SwingConstants.TOP); three = new JLabel(); three.setFont(fontData); three.setHorizontalAlignment(SwingConstants.CENTER); three.setVerticalAlignment(SwingConstants.TOP); four = new JLabel(); four.setFont(fontData); four.setHorizontalAlignment(SwingConstants.CENTER); four.setVerticalAlignment(SwingConstants.TOP); one.setText("Test"); two.setText("Test"); three.setText("Test"); four.setText("Test"); controlDisplay.add(titleOne); controlDisplay.add(titleTwo); controlDisplay.add(titleThree); controlDisplay.add(titleFour); controlDisplay.add(one); controlDisplay.add(two); controlDisplay.add(three); controlDisplay.add(four); visualizer.setLayout(new GridLayout(2,1)); //Col 1 of Visualizer yokeGrid.setMinimumSize(new Dimension(100,100)); //grid.setOpaque(true); // grid.setLayout(null); yokeGrid.setBackground(Color.black); yokeGrid.setVisible(true); // grid.setLayout(new GridLayout(1,1)); yokeGrid.setLayout(new OverlayLayout(yokeGrid)); yoke = new yokePosition(yokeGrid.getWidth(), yokeGrid.getHeight()); // yaw yaw = new yaw(grid.getWidth(), grid.getHeight()); axis = new axis(yokeGrid.getWidth(), yokeGrid.getHeight()); // grid.setLayer(axis, layer1); yokeGrid.add(axis); yokeGrid.add(yoke); // grid.add(yaw); // grid.setLayer(yoke, layer2); Border greenLine = BorderFactory.createLineBorder(Color.green); yokeGrid.setBorder(greenLine); visualizer.add(yokeGrid); //Row 2 of Visualizer //Rudder Vizualizer rudderGrid = new rudderPosition(yokeGrid.getWidth(), 0); visualizer.add(rudderGrid); JToolBar tool = new JToolBar("Toolbar"); JButton b1 = new JButton("Data Log Disabled"); ActionListener press = new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if(m.logPermission() == false){ m.startLog(); JOptionPane.showMessageDialog(frame,"Data Logging Enabled"); tool.setBackground(Color.green); b1.setText("Data Log Enabled"); } else { m.stopLog(); JOptionPane.showMessageDialog(frame,"Data Logging Disabled"); tool.setBackground(Color.white); b1.setText("Data Log Disabled"); } } }; b1.addActionListener(press); JButton b2 = new JButton("button 2"); tool.setBackground(Color.red); tool.setOrientation(1); tool.add(b1); tool.add(b2); frame.add(tool,BorderLayout.WEST); JPanel buttonBar = new JPanel(); buttonBar.setLayout(new GridLayout(2,1)); JToolBar tool2 = new JToolBar("Toolbar"); JButton b3 = new JButton("button 2"); JButton b4 = new JButton("button 2"); tool2.add(b3); tool2.add(b4); JToolBar tool3 = new JToolBar("Toolbar"); JButton b5 = new JButton("button 3"); JButton b6 = new JButton("button 3"); tool3.add(b5); tool3.add(b6); buttonBar.add(tool2); buttonBar.add(tool3); modelQueue.setRows(3); modelQueue.setPreferredSize(new Dimension(250, mainDisplay.getWidth())); modelVision.setRows(1); Font font = new Font("Verdana", Font.BOLD, 12); modelVision.setFont(font); modelVision.setBackground(Color.PINK); modelVision.setPreferredSize(new Dimension(250, mainDisplay.getWidth())); modelDisplay.setLayout(new GridLayout(2,1)); modelDisplay.add(modelQueue); modelDisplay.add(modelVision); mainDisplay.setLayout(new BorderLayout()); mainDisplay.add(controlDisplay,BorderLayout.CENTER); mainDisplay.add(modelDisplay,BorderLayout.SOUTH); frameBottom.add(mainDisplay); // Left Side frameBottom.add(visualizer); // Right Side frame.add(frameBottom,BorderLayout.CENTER); frame.add(buttonBar, BorderLayout.SOUTH); frame.pack(); } public void updateVisualizer(Model m) throws IOException { float[] ctrl1 = m.getCurrentControls(); one.setText(String.valueOf(ctrl1[0])); if(ctrl1[0] >= 0 ) { one.setForeground(Color.green); } else { one.setForeground(Color.red); } two.setText(String.valueOf(ctrl1[1])); if(ctrl1[1] >= 0 ) { two.setForeground(Color.green); } else { two.setForeground(Color.red); } three.setText(String.valueOf(ctrl1[2])); if(ctrl1[2] >= 0 ) { three.setForeground(Color.green); } else { three.setForeground(Color.red); } four.setText(String.valueOf(ctrl1[3])); if(ctrl1[3] >= 0 ) { four.setForeground(Color.green); } else { four.setForeground(Color.red); } yoke.setXBound(yokeGrid.getWidth()); yoke.setYBound(yokeGrid.getHeight()); yoke.setX(ctrl1[1]); yoke.setY(ctrl1[0]); yoke.repaint(); rudderGrid.setXBound(yokeGrid.getWidth()); rudderGrid.setYBound(yokeGrid.getHeight()); rudderGrid.setX(ctrl1[2]); rudderGrid.repaint(); modelQueue.setText(m.getQueue().queueToString()); modelQueue.setPreferredSize(new Dimension(mainDisplay.getWidth(),100)); modelVision.setPreferredSize(new Dimension(mainDisplay.getWidth(),100)); modelVision.setText("We just looked at: " + m.getStoredVisionTarget() +"\n" + "Result: " + m.getStoredVisionResult()[0]); // yaw.setYBound(grid.getHeight()); // yaw.setYBound(grid.getHeight()); // yaw.setX(ctrl1[2]); // yaw.repaint(); axis.setXBound(yokeGrid.getWidth()); axis.setYBound(yokeGrid.getHeight()); axis.repaint(); JButton j = new JButton(); } }