package class9_2_MapperPersonWriter; import class4_2_ActionHandlers.ButtonHandler; import javax.swing.*; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.nio.file.Path; import java.util.ArrayList; import java.util.List; public class Mapper extends JFrame { private final JLabel pictureLabel; private List people = new ArrayList<>(); // int myInt = 5000.0; // double myDouble = 10000; public static void main(String[] args) { new Mapper(); } public Mapper() { // setSize(500, 400); setDefaultCloseOperation(EXIT_ON_CLOSE); setLayout(new FlowLayout()); ImageIcon image = new ImageIcon("map.png"); pictureLabel = new JLabel(image); add(pictureLabel); // Note: We won't use a layout since we want to manually position the people. JPanel innerPanel = new JPanel(); innerPanel.setLayout(new GridLayout(1, 1)); pictureLabel.add(innerPanel); innerPanel.setLocation(10, 10); JButton button = new JButton("Open locations"); button.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e) { loadPeople(); } }); innerPanel.add(button); // "Homework" Exercise: Get the "Close button" // to show up UNDER instead of TO THE RIGHT of the close button. JButton closeButton = new JButton("Save locations"); closeButton.addActionListener(e->savePeople()); // closeButton.addActionListener(new HandleButtons()); innerPanel.add(closeButton); JButton generateButton = new JButton("Generate location"); generateButton.addActionListener(e->generatePeople()); innerPanel.add(generateButton); pack(); innerPanel.setSize(innerPanel.getPreferredSize()); setVisible(true); } private class HandleButtons implements ActionListener { public void actionPerformed(ActionEvent e) { if(e.getSource().equals("Open locations")) { loadPeople(); } else if(e.getSource().equals("Save locations")) { savePeople(); } } } private void loadPeople() { JFileChooser chooser = new JFileChooser("."); int result = chooser.showOpenDialog(Mapper.this); if(result == JFileChooser.APPROVE_OPTION) { Path path = chooser.getSelectedFile().toPath(); try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path.toFile()))) { people = (List) ois.readObject(); } catch (FileNotFoundException e) { e.printStackTrace(); // TODO: Something more meaningful } catch (IOException e) { e.printStackTrace(); // TODO: Something more meaningful } catch (ClassNotFoundException e) { e.printStackTrace(); // TODO: Something more meaningful } catch (ClassCastException e){ System.out.println("not what we expected!"); } for(Person person: people) { pictureLabel.add(person.getDisplayOfMe()); } repaint(); } } private void savePeople() { JFileChooser chooser = new JFileChooser("."); int result = chooser.showOpenDialog(Mapper.this); if(result == JFileChooser.APPROVE_OPTION) { Path path = chooser.getSelectedFile().toPath(); try (OutputStream os = new FileOutputStream(path.toFile())) { ObjectOutputStream oos = new ObjectOutputStream(os); // oos.writeInt(1); oos.writeObject(people); } catch (FileNotFoundException e) { e.printStackTrace(); // TODO: Something more meaningful } catch (IOException e) { e.printStackTrace(); // TODO: Something more meaningful } } } private void generatePeople() { for(int i = 0; i<5; i++) { Person p = new Person(); p.jump(pictureLabel.getPreferredSize().width, pictureLabel.getPreferredSize().height); pictureLabel.add(p.getDisplayOfMe()); people.add(p); } repaint(); } }