Bonjour
Je débute en java et je me demande comment organiser au mieux mes classes pour avoir quelque chose de clair et propre.
Alors j'ai penser faire une classe principale MainClass (ou MonProgrammeDeLaMortQuiTue), qui contienne la méthode main, et qui gérerais l'ensemble des autres classes, en particulier les événement qui se passe dans l'UI. L'idée est de disjoindre la partie fonctionnelle de la partie graphique
Voilà ce que ça donne en test avec une fenêtre.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 package MW; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.border.EmptyBorder; import javax.swing.JTextField; import javax.swing.JButton; public class MainWindow extends JFrame { private JPanel contentPane; public JTextField textField; public JButton btnNewButton; /** * Launch the application. */ /** * Create the frame. */ public MainWindow() { setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); setBounds(100, 100, 450, 300); contentPane = new JPanel(); contentPane.setBorder(new EmptyBorder(5, 5, 5, 5)); setContentPane(contentPane); contentPane.setLayout(null); textField = new JTextField(); textField.setBounds(10, 11, 86, 20); contentPane.add(textField); textField.setColumns(10); btnNewButton = new JButton("New button"); btnNewButton.setBounds(137, 10, 89, 23); contentPane.add(btnNewButton); } }J'ai bataillé pour faire fonctionner ça jusqu'à que j'ai l'idée d'instancier un objet statique MainClass à l'intérieur d'elle même. Cela m'a tout débloqué. Je trouve ça bizarre d'avoir du faire cette déclaration, car java devait le faire je pense de manière implicite pour pouvoir fonctionner. Reste que cet objet implicite est inaccessible car pas nommé. j'ai essayé avec this cela ne fonctionne pas. J’espère que du coup je me retrouve pas avec 2 objets différents MainClass, ce qui risque de me poser des problèmes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 package MW; import java.awt.EventQueue; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JOptionPane; public class MainClass { private static MainClass main = new MainClass(); private static MainWindow frame; public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { try { frame = new MainWindow(); } catch (Exception e) { e.printStackTrace(); } initFrame(); } }); } private static void initFrame(){ frame.setVisible(true); frame.addWindowListener(main.new WindowClose()); frame.btnNewButton.addMouseListener(main.new NewButtonClick()); } class NewButtonClick extends MouseAdapter { public void mouseClicked(MouseEvent e) { JOptionPane.showMessageDialog(null, "Vous avez saisie " + frame.textField.getText(), "information", JOptionPane.OK_OPTION); } } class WindowClose extends WindowAdapter { public void windowClosing(WindowEvent e) { //Ici on demande la confirmation de fermeture de l'application int reponse = JOptionPane.showConfirmDialog(null, "Voulez-vous vraiment quitter ?", "Confirmation", JOptionPane.YES_NO_OPTION); if (reponse == JOptionPane.YES_OPTION){ //Sauvegarde des préférences //Quit l'application System.exit(0); } } } }
Si j'ai bien compris, avec cette méthode, je suis condamné à programmer toutes mes instanciations d'objet à l'intérieur de la méthode run, elle même à l'intérieur de la méthode main, et qui constitue la boucle principale du programme. C'est un peu lourd je trouve. Il n'y a pas une meilleure solution ?
Partager