Histoire de créer une application de gestion de tâches avec Swing, Java

Bonjour, c'est un certain ingénieur d'entreprise. J'étudie parce que je pense que c'est mal d'être ingénieur, mais d'avoir une compréhension vague de l'orientation des objets. Dans ce cadre, j'ai décidé de comprendre l'écriture orientée objet tout en créant une application de gestion des tâches. Je laisserai le processus comme un mémorandum.

Pour le moment, les spécifications sont comme ça. -Application de bureau personnelle (je ne veux pas me connecter ou quoi que ce soit d'autre) ・ L'interface utilisateur de base respecte trello https://trello.com/ -Utilisez SQLite pour enregistrer les tâches enregistrées

J'ai donc fait la première page. スクリーンショット 2017-09-13 9.59.04.png

Cela fonctionne avec un code comme celui-ci. (Avant de refactoriser.)

public class Top extends JFrame{
        /**
        *Lancer l'application
        */
        public static void main(String[] args) {
        	Top frame = new Top("Task Manager");
            frame.setVisible(true);
        }
        
        Top(String title){
        	setTitle(title);
            setBounds(100, 100, 1000, 800);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            setLayout(new FlowLayout());

            //Zone d'affichage des tâches TODO
            //Disposition de la zone d'affichage des tâches
            JPanel TodoPanel = new JPanel();
            TodoPanel.setPreferredSize(new Dimension(300, 600));
            TodoPanel.setBackground(Color.WHITE);
            TodoPanel.setLayout(new BoxLayout(TodoPanel, BoxLayout.X_AXIS));
            
            //Panneau pour placer les titres
            JPanel TodoTitlePanel = new JPanel();
            TodoTitlePanel.setPreferredSize(new Dimension(300, 60));
            TodoTitlePanel.setBackground(Color.WHITE);
            TodoTitlePanel.setLayout(new BoxLayout(TodoTitlePanel, BoxLayout.Y_AXIS));
            TodoTitlePanel.setAlignmentY(0.0f);
            TodoPanel.add(TodoTitlePanel);
            
            //Placement du titre
            JLabel label = new JLabel("TODO");
            label.setFont(new Font("MS Gothic", Font.BOLD, 32));
            label.setAlignmentX(0.5f);
            TodoTitlePanel.add(label);
            
            //Bordure de cadre
            LineBorder border = new LineBorder(Color.BLACK, 2, true);
            TodoPanel.setBorder(border);
            
            //DOING zone d'affichage des tâches
            //Disposition de la zone d'affichage des tâches
            JPanel DoingPanel = new JPanel();
            DoingPanel.setPreferredSize(new Dimension(300, 600));
            DoingPanel.setBackground(Color.WHITE);
            DoingPanel.setLayout(new BoxLayout(DoingPanel, BoxLayout.X_AXIS));
            
            //Panneau pour placer les titres
            JPanel DoingTitlePanel = new JPanel();
            DoingTitlePanel.setPreferredSize(new Dimension(300, 60));
            DoingTitlePanel.setBackground(Color.WHITE);
            DoingTitlePanel.setLayout(new BoxLayout(DoingTitlePanel, BoxLayout.Y_AXIS));
            DoingTitlePanel.setAlignmentY(0.0f);
            DoingPanel.add(DoingTitlePanel);
            
            //Placement du titre
            JLabel doingLabel = new JLabel("DOING");
            doingLabel.setFont(new Font("MS Gothic", Font.BOLD, 32));
            doingLabel.setAlignmentX(0.5f);
            DoingTitlePanel.add(doingLabel);
            
            //Bordure de cadre
            LineBorder border2 = new LineBorder(Color.BLACK, 2, true);
            DoingPanel.setBorder(border2);
            
            //Zone d'affichage des tâches DONE
            //Disposition de la zone d'affichage des tâches
            JPanel DonePanel = new JPanel();
            DonePanel.setPreferredSize(new Dimension(300, 600));
            DonePanel.setBackground(Color.WHITE);
            DonePanel.setLayout(new BoxLayout(DonePanel, BoxLayout.X_AXIS));
            
            //Panneau pour placer les titres
            JPanel DoneTitlePanel = new JPanel();
            DoneTitlePanel.setPreferredSize(new Dimension(300, 60));
            DoneTitlePanel.setBackground(Color.WHITE);
            DoneTitlePanel.setLayout(new BoxLayout(DoneTitlePanel, BoxLayout.Y_AXIS));
            DoneTitlePanel.setAlignmentY(0.0f);
            DonePanel.add(DoneTitlePanel);
            
            //Bordure de cadre
            LineBorder border3 = new LineBorder(Color.BLACK, 2, true);
            DonePanel.setBorder(border3);
            
            //Placement du titre
            JLabel doneLabel = new JLabel("DONE");
            doneLabel.setFont(new Font("MS Gothic", Font.BOLD, 32));
            doneLabel.setAlignmentX(0.5f);
            DoneTitlePanel.add(doneLabel);
            
            //Disposition des boutons
            JPanel buttonPanel = new JPanel();
            
            JButton createButton = new JButton("Créer un nouveau");
            createButton.setPreferredSize(new Dimension(100,50));
            buttonPanel.add(createButton);
            
            JButton editButton = new JButton("Modifier la tâche");
            editButton.setPreferredSize(new Dimension(100,50));
            buttonPanel.add(editButton);

            Container contentPane = getContentPane();
            contentPane.add(TodoPanel);
            contentPane.add(DoingPanel);
            contentPane.add(DonePanel);
            contentPane.add(buttonPanel);
          }
} 

C'est long. Il y a trois endroits où le même traitement est effectué. C'est un problème car vous devez créer de nouvelles étiquettes et panneaux avec balançoire. Ainsi, le code ci-dessous résume le traitement dupliqué.

public class Top extends JFrame{
        /**
        *Lancer l'application
        */
        public static void main(String[] args) {
        	Top frame = new Top("Task Manager");
            frame.setVisible(true);
        }
        
        Top(String title){
        	setTitle(title);
            setBounds(100, 100, 1000, 800);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            setLayout(new FlowLayout());

            //Affichage des tâches TODO
            makeTaskPanel("TODO");
            
            //Affichage des tâches en cours
            makeTaskPanel("DOING");
            
            //Zone d'affichage des tâches DONE
            makeTaskPanel("DONE");
            
            //Disposition des boutons
            JPanel buttonPanel = new JPanel();
            TaskRegister taskRegisterPanel = new TaskRegister();
            this.add(taskRegisterPanel);
            taskRegisterPanel.setVisible(false);
            JButton createButton = new JButton("Créer un nouveau");
            
            buttonPanel.add(createButton);
            
            JButton editButton = new JButton("Modifier la tâche");
            editButton.setPreferredSize(new Dimension(100,50));
            buttonPanel.add(editButton);

            Container contentPane = getContentPane();
            contentPane.add(buttonPanel);
          }
        
        public void makeTaskPanel(String panelTitle){
        	//Créer un panneau des tâches avec le texte du titre spécifié dans le titre
            JPanel mainPanel = new JPanel();
            JPanel titlePanel = new JPanel();
            JLabel titleLabel = new JLabel(panelTitle);
            LineBorder border = new LineBorder(Color.BLACK, 2, true);
            
        	//Disposition de la zone d'affichage des tâches
            mainPanel.setPreferredSize(new Dimension(300, 600));
            mainPanel.setBackground(Color.WHITE);
            mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));
            
            //Panneau pour placer les titres
            titlePanel.setPreferredSize(new Dimension(300, 60));
            titlePanel.setBackground(Color.WHITE);
            titlePanel.setLayout(new BoxLayout(titlePanel, BoxLayout.Y_AXIS));
            titlePanel.setAlignmentY(0.0f);
            mainPanel.add(titlePanel);
            
            //Placement du titre
            titleLabel.setFont(new Font("MS Gothic", Font.BOLD, 32));
            titleLabel.setAlignmentX(0.5f);
            titlePanel.add(titleLabel);
            
            //Bordure de cadre
            mainPanel.setBorder(border);
            
            Container contentPane = getContentPane();
            contentPane.add(mainPanel);
        }
} 

Ce qui a été dupliqué

  1. Nouveau panneau, étiquette, etc.
  2. Organisez la taille et ainsi de suite Comme c'était une partie à faire, j'ai découpé cette partie en méthode. En orientation objet, la cohésion est forte et le couplage est faible </ fort>, meilleure est la conception.

Cela signifie-t-il que les fonctions en double doivent être regroupées autant que possible afin que l'appelant puisse les appeler facilement? Je vais donc continuer à faire de mon mieux.

Recommended Posts

Histoire de créer une application de gestion de tâches avec Swing, Java
L'histoire de la création d'un lanceur de jeu avec une fonction de chargement automatique [Java]
L'histoire de la création d'un proxy inverse avec ProxyServlet
L'histoire de la création de DTO, semblable à Dao avec Java, SQLite
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
L'histoire de la fabrication d'un Othello ordinaire à Java
Système de gestion des tâches / clones Java / Twitter ① Créer une base de données
Une histoire sur le développement de ROS appelé rosjava avec java
Une histoire de rendre catkin_make de rosjava compatible hors ligne
J'ai essayé de moderniser une application Java EE avec OpenShift.
Une histoire remplie des bases de Spring Boot (résolu)
Vérifier le fonctionnement de deux rôles avec une application de chat
[Java] Simplifiez la mise en œuvre de la gestion de l'historique des données avec Reladomo
Implémentation d'un analyseur de syntaxe mathématique par méthode d'analyse syntaxique descendante récursive (Java)
Une histoire à laquelle j'étais accro avec toString () d'Interface qui était proxy avec JdkDynamicAopProxy
L'histoire de la création d'une version Java du serveur Minecraft avec GCP (et également de la création d'une liste blanche)
Une histoire bloquée avec NotSerializableException
Transition d'écran avec swing, java
Procédure de création de l'application de gestion des tâches
L'histoire du refactoring avec un assistant personnel pour la première fois dans une application Rails
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
Comparaison du développement d'applications WEB avec Rails et Java Servlet + JSP
Créons une application TODO en Java 4 Implémentation de la fonction de publication
Créons une application Web de gestion de livres avec Spring Boot part1
J'ai essayé d'exécuter une application d'échange de cartes de crédit avec Corda 1
[Note] Une histoire sur la modification des outils de compilation Java avec VS Code
Créons une application Web de gestion de livres avec Spring Boot part3
Créons une application TODO en Java 6 Implémentation de la fonction de recherche
Une histoire sur la connexion à un serveur CentOS 8 avec un ancien Ansible
Créons une application TODO en Java 8 Implémentation des fonctions d'édition
Créons une application Web de gestion de livres avec Spring Boot part2
Note n ° 2 "Création d'un historique de recherche avec ArrayList et HashSet" [Java]
Une histoire sur la difficulté à aligner un cadre de test avec Java 6
Une histoire qui a eu du mal avec l'introduction de Web Apple Pay
Créons une application TODO avec Java 1 Brève explication de MVC
L'histoire de la création d'un jeu d'Othello de type communication avec Scala.
Créons une application TODO en Java 5 Changer l'affichage de TODO
Pensez à une stratégie de mise à jour Java
Construire un projet Java avec Gradle
[Édition Java] Histoire de la sérialisation
J'ai créé une interface graphique avec Swing
Histoire vraiment effrayante (anti-motif Java)
Histoire du passage de Java Gold SE8
Trier la liste des objets Java
Créer une application Web avec Javalin
Accéder à Teradata depuis une application Java
Impressions de faire Black Jack-cli avec Ruby
Une brève description des dépendances JAVA
Exécuter des applications écrites en Java8 en Java6
L'histoire de rendre possible la construction d'un projet qui a été construit par Maven avec Ant
Je voulais écrire un processus équivalent à une instruction while avec l'API Java 8 Stream
Obtenir une liste de fichiers S3 avec ListObjectsV2Request (AWS SDK for Java)
Un enregistrement de la configuration d'un environnement de développement Java avec Visual Studio Code
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Exprimons le résultat de l'analyse du code d'octet Java dans un diagramme de classes
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
[Java] Déployer une application Web créée avec Eclipse + Maven + Ontology avec Heroku
Volume d'essais pour créer une application Web Java sur Windows Server 2016