TraceurSwing.java
  1 package dessiner;
2 import javax.swing.*;
3 import javax.swing.filechooser.FileFilter;
4 import java.awt.*;
5 import java.awt.event.WindowAdapter;
6 import java.awt.event.WindowEvent;
7 import java.awt.event.ActionListener;
8 import java.awt.event.ActionEvent;
9 import java.io.File;
10 import java.io.IOException;
11 /** 12 * Partie Swing de l'application 13 */ 14 public class TraceurSwing extends JFrame implements ActionListener, SettingsUpdateListener {
15
16 protected JButton sauve, exit, update;
17
18 protected JTextField minX, minY, maxX, maxY;
19
20 protected GraphePanel graphePanel;
21 /** 22 * constructeur à partir d'un Graphe 23 * @param graphe 24 */ 25 public TraceurSwing(Graphe graphe) {
26 sauve = new JButton("Sauve");
27 sauve.addActionListener(this);
28
29 exit = new JButton("Sortie");
30 exit.addActionListener(this);
31
32 JPanel toolbar = new JPanel(new FlowLayout(FlowLayout.RIGHT));
33
34 minX = new JTextField(String.valueOf(graphe.traceurSettings.getMinX()));
35 minY = new JTextField(String.valueOf(graphe.traceurSettings.getMinY()));
36 maxX = new JTextField(String.valueOf(graphe.traceurSettings.getMaxX()));
37 maxY = new JTextField(String.valueOf(graphe.traceurSettings.getMaxY()));
38
39 toolbar.add(new JLabel("X: "));
40 toolbar.add(minX);
41 toolbar.add(new JLabel("-"));
42 toolbar.add(maxX);
43 toolbar.add(new JLabel(", Y:"));
44 toolbar.add(minY);
45 toolbar.add(new JLabel("-"));
46 toolbar.add(maxY);
47
48 update = new JButton("Mise-à-jour");
49 update.addActionListener(this);
50 toolbar.add(update);
51 toolbar.add(sauve);
52 toolbar.add(exit);
53 // graphePanel contient la partie graphique 54 graphePanel = new GraphePanel(this);
55 addWindowListener(new WindowAdapter() {
56 @Override
57 public void windowClosing(WindowEvent e) {
58 System.exit(0);
59 }
60 }
61 );
62 Container c = getContentPane();
63 c.add(toolbar, BorderLayout.SOUTH);
64 c.add(graphePanel, BorderLayout.CENTER);
65 setSize(640, 480);
66 setTitle("Traceur");
67 setVisible(true);
68
69 graphePanel.setGraph(graphe);
70
71 }
72
73 /** 74 * mise à jour 75 * @param settings 76 */ 77 public void graphUpdated(TraceurSettings settings) {
78 minX.setText(String.valueOf(settings.getMinX()));
79 minY.setText(String.valueOf(settings.getMinY()));
80 maxX.setText(String.valueOf(settings.getMaxX()));
81 maxY.setText(String.valueOf(settings.getMaxY()));
82 }
83
84 public void actionPerformed(ActionEvent e) {
85
86 if (e.getSource() == update) {
87 Graphe g = graphePanel.getGraph();
88 g.traceurSettings.setMinX(Double.parseDouble(minX.getText()));
89 g.traceurSettings.setMaxX(Double.parseDouble(maxX.getText()));
90 g.traceurSettings.setMinY(Double.parseDouble(minY.getText()));
91 g.traceurSettings.setMaxY(Double.parseDouble(maxY.getText()));
92 graphePanel.repaint();
93 }
94
95 // Suve une image du graphe 96 if (e.getSource() == sauve) {
97 JFileChooser filechooser = new JFileChooser(System.getProperty("user.home"));
98 filechooser.setDialogTitle("Sauver image du graphe");
99 filechooser.setSelectedFile(new File(filechooser.getCurrentDirectory(), "graphe.png"));
100 filechooser.setFileFilter(new FileFilter() {
101 public boolean accept(File f) {
102 String extension = f.getName().substring(f.getName().lastIndexOf('.') + 1).toLowerCase();
103 if (f.isDirectory()) return true;
104 if (extension.equals("bmp")) return true;
105 if (extension.equals("jpg")) return true;
106 if (extension.equals("png")) return true;
107 return false;
108 }
109
110 public String getDescription() {
111 return "Image Files: jpg, png, bmp";
112 }
113 });
114 int action = filechooser.showSaveDialog(this);
115 if (action == JFileChooser.APPROVE_OPTION) {
116 File f = filechooser.getSelectedFile();
117 try {
118 String extension = f.getName().substring(f.getName().lastIndexOf(".") + 1);
119 javax.imageio.ImageIO.write(graphePanel.getImage(), extension, f);
120 } catch (IOException err) {
121 JOptionPane.showMessageDialog(this, "Impossible de Sauvegarder: " + err.getMessage());
122 }
123 }
124 }
125
126 // Exit 127 if (e.getSource() == exit) {
128 System.exit(0);
129 }
130
131 }
132
133 }
134
135