import java.awt.Color; import java.awt.EventQueue; import java.awt.FlowLayout; import java.awt.Font; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JToggleButton; import javax.swing.border.EmptyBorder; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; /** * @author Alex A. Gonzalez * @version 10/01/2016 * * This class contains all the variables and methods need for the program. * It just demonstrates how the bridge learns the locations of the nodes before flooding a network. * * ************!!!!!!!!!WARNING!!!!!!!****************** * Must redirect links for Images in all the node JLabels. * */ public class Program extends JFrame { //////////////////CLASS VARIABLES//////////////////////////////////////////////// private JPanel contentPane; public boolean switchA = false; public boolean switchB = false; public boolean switchC = false; public boolean switchD = false; public boolean switchE = false; public boolean switchF = false; public boolean switchG = false; public boolean switchH = false; public boolean knowE = false; public boolean knowF = false; public boolean knowG = false; public boolean knowH = false; /** * Launch the application. */ public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { Program frame = new Program(); frame.setVisible(true); } catch (Exception e) { e.printStackTrace(); } } }); } /** * Create the frame. */ public Program() { //creates JFrame window setResizable(false); setTitle("Backward Learning Bridge"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setBounds(100, 100, 1100, 650); contentPane = new JPanel(); contentPane.setBackground(Color.DARK_GRAY); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); //create main panel showing diagram JPanel mainPanel = new JPanel(); mainPanel.setBackground(Color.WHITE); mainPanel.setBounds(136, 6, 958, 616); contentPane.add(mainPanel); mainPanel.setLayout(null); //////////////////NODES//////////////////////////////////////////////// JLabel nodeH = new JLabel(""); nodeH.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeH.setBounds(704, 458, 100, 114); mainPanel.add(nodeH); JLabel nodeE = new JLabel(""); nodeE.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeE.setBounds(704, 20, 100, 114); mainPanel.add(nodeE); JLabel nodeG = new JLabel(""); nodeG.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeG.setBounds(704, 328, 100, 114); mainPanel.add(nodeG); JLabel nodeF = new JLabel(""); nodeF.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeF.setBounds(704, 150, 100, 114); mainPanel.add(nodeF); JLabel nodeC = new JLabel(""); nodeC.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeC.setBounds(141, 328, 100, 114); mainPanel.add(nodeC); JLabel nodeD = new JLabel(""); nodeD.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeD.setBounds(141, 458, 100, 114); mainPanel.add(nodeD); JLabel nodeB = new JLabel(""); nodeB.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeB.setBounds(141, 150, 100, 114); mainPanel.add(nodeB); JLabel nodeA = new JLabel(""); nodeA.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeA.setBounds(141, 20, 100, 114); mainPanel.add(nodeA); JLabel bridgeLayout = new JLabel(""); bridgeLayout.setBounds(79, 5, 800, 600); bridgeLayout.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/bridgeDiagram.png")); mainPanel.add(bridgeLayout); ////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////RUN BUTTON AND MAIN LEARNING FUNCTIONS//////////////////////////////////////////////// JButton btnRun = new JButton("RUN"); btnRun.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JLabel startNode = null; JLabel endNode = null; boolean isKnown = false; if(switchA == true){ startNode = nodeA; } else if(switchB == true){ startNode = nodeB; } else if(switchC == true){ startNode = nodeC; } else if(switchD == true){ startNode = nodeD; } if(switchE == true){ endNode = nodeE; } else if(switchF == true){ endNode = nodeF; } else if(switchG == true){ endNode = nodeG; } else if(switchH == true){ endNode = nodeH; } if(endNode == nodeE){ isKnown = knowE; } else if(endNode == nodeF){ isKnown =knowF; } else if(endNode == nodeG){ isKnown =knowG; } else if(endNode == nodeH){ isKnown =knowH; } if(endNode != null && isKnown){ endNode.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); mainPanel.repaint(); } else if(endNode != null && !isKnown){ nodeA.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); nodeB.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); nodeC.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); nodeD.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); nodeE.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); nodeF.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); nodeG.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); nodeH.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_got.png")); startNode.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.repaint(); } else if(endNode == null && startNode == null){ nodeA.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeB.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeC.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeD.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeE.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeF.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeG.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); nodeH.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.repaint(); } if(endNode == nodeE){ knowE = true; } else if(endNode == nodeF){ knowF = true; } else if(endNode == nodeG){ knowG = true; } else if(endNode == nodeH){ knowH = true; } } }); btnRun.setBackground(Color.LIGHT_GRAY); btnRun.setFont(new Font("Lucida Grande", Font.PLAIN, 17)); btnRun.setBounds(6, 346, 125, 276); contentPane.add(btnRun); //////////////////////////////////////////////////////////////////////////////// //////////////////NAV BAR AND TOGGLE BUTTONS//////////////////////////////////////////////// JPanel navbar = new JPanel(); //creates navbar panel navbar.setBackground(Color.GRAY); navbar.setBounds(6, 6, 125, 334); contentPane.add(navbar); navbar.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5)); JLabel lblFrom = new JLabel("FROM:"); lblFrom.setForeground(Color.WHITE); lblFrom.setFont(new Font("Sequel", Font.BOLD, 15)); navbar.add(lblFrom); JToggleButton tglbtnToogleA = new JToggleButton("Toggle A"); tglbtnToogleA.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED){ nodeA.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.add(nodeA); switchA = true; //flag selecting node } else{ nodeA.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.add(nodeA); switchA = false; //flag deselecting node, same for every other toggle button } } }); navbar.add(tglbtnToogleA); JToggleButton tglbtnToogleB = new JToggleButton("Toggle B"); tglbtnToogleB.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED){ nodeB.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.add(nodeB); switchB = true; } else{ nodeB.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.add(nodeB); switchB = false; } } }); navbar.add(tglbtnToogleB); JToggleButton tglbtnToogleC = new JToggleButton("Toggle C"); tglbtnToogleC.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED){ nodeC.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.add(nodeC); switchC = true; } else{ nodeC.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.add(nodeC); switchC = false; } } }); navbar.add(tglbtnToogleC); JToggleButton tglbtnToogleD = new JToggleButton("Toggle D"); tglbtnToogleD.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED){ nodeD.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.add(nodeD); switchD = true; } else{ nodeD.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.add(nodeD); switchD = false; } } }); navbar.add(tglbtnToogleD); JLabel lblTo = new JLabel("TO:"); lblTo.setForeground(Color.WHITE); lblTo.setFont(new Font("Sequel", Font.BOLD, 15)); navbar.add(lblTo); JToggleButton tglbtnToogleE = new JToggleButton("Toggle E"); tglbtnToogleE.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED){ nodeE.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.add(nodeE); switchE = true; } else{ nodeE.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.add(nodeE); switchE = false; } } }); navbar.add(tglbtnToogleE); JToggleButton tglbtnToogleF = new JToggleButton("Toggle F"); tglbtnToogleF.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED){ nodeF.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.add(nodeF); switchF = true; } else{ nodeF.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.add(nodeF); switchF = false; } } }); navbar.add(tglbtnToogleF); JToggleButton tglbtnToogleG = new JToggleButton("Toggle G"); tglbtnToogleG.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED){ nodeG.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.add(nodeG); switchG = true; } else{ nodeG.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.add(nodeG); switchG = false; } } }); navbar.add(tglbtnToogleG); JToggleButton tglbtnToogleH = new JToggleButton("Toggle H"); tglbtnToogleH.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent e) { if(e.getStateChange()==ItemEvent.SELECTED){ nodeH.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node_on.png")); mainPanel.add(nodeH); switchH = true; } else{ nodeH.setIcon(new ImageIcon("/Users/alxgnz/Desktop/ProjectImages/node.png")); mainPanel.add(nodeH); switchH = false; } } }); navbar.add(tglbtnToogleH); }// end of function }// end of program