스윙, 자바로 작업 관리 프로그램을 만들면

7619 단어 SwingJava
안녕하세요, 저는 모 회사의 엔지니어입니다.
엔지니어인데도 상대방의 방향만 애매모호하게 이해하고 공부하고 있습니다.
그 일환으로 나는 임무 관리 프로그램을 만들면서 대상을 향한 쓰기를 이해하기로 했다.
비망록으로 과정을 남겼다.
당분간 방법으로 이런 느낌.
· 개인용 데스크톱 프로그램 (로그인 같은 것은 가입하고 싶지 않습니다.)
· 기본 UI 존중trellohttps://trello.com/
· 등록 퀘스트의 기록 사용 SQLite그래서 첫 페이지를 만들었어요.

이런 느낌의 전선으로 움직이고 있다.(팩스를 보내기 전에.)
public class Top extends JFrame{
        /**
        * アプリケーションの起動
        */
        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());

            //TODOタスク表示領域
            //タスク表示領域配置
            JPanel TodoPanel = new JPanel();
            TodoPanel.setPreferredSize(new Dimension(300, 600));
            TodoPanel.setBackground(Color.WHITE);
            TodoPanel.setLayout(new BoxLayout(TodoPanel, BoxLayout.X_AXIS));

            //タイトルを置く用のパネル
            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);

            //タイトル配置
            JLabel label = new JLabel("TODO");
            label.setFont(new Font("MS ゴシック", Font.BOLD, 32));
            label.setAlignmentX(0.5f);
            TodoTitlePanel.add(label);

            //枠線
            LineBorder border = new LineBorder(Color.BLACK, 2, true);
            TodoPanel.setBorder(border);

            //DOINGタスク表示領域
            //タスク表示領域配置
            JPanel DoingPanel = new JPanel();
            DoingPanel.setPreferredSize(new Dimension(300, 600));
            DoingPanel.setBackground(Color.WHITE);
            DoingPanel.setLayout(new BoxLayout(DoingPanel, BoxLayout.X_AXIS));

            //タイトルを置く用のパネル
            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);

            //タイトル配置
            JLabel doingLabel = new JLabel("DOING");
            doingLabel.setFont(new Font("MS ゴシック", Font.BOLD, 32));
            doingLabel.setAlignmentX(0.5f);
            DoingTitlePanel.add(doingLabel);

            //枠線
            LineBorder border2 = new LineBorder(Color.BLACK, 2, true);
            DoingPanel.setBorder(border2);

            //DONEタスク表示領域
            //タスク表示領域配置
            JPanel DonePanel = new JPanel();
            DonePanel.setPreferredSize(new Dimension(300, 600));
            DonePanel.setBackground(Color.WHITE);
            DonePanel.setLayout(new BoxLayout(DonePanel, BoxLayout.X_AXIS));

            //タイトルを置く用のパネル
            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);

            //枠線
            LineBorder border3 = new LineBorder(Color.BLACK, 2, true);
            DonePanel.setBorder(border3);

            //タイトル配置
            JLabel doneLabel = new JLabel("DONE");
            doneLabel.setFont(new Font("MS ゴシック", Font.BOLD, 32));
            doneLabel.setAlignmentX(0.5f);
            DoneTitlePanel.add(doneLabel);

            //ボタン配置
            JPanel buttonPanel = new JPanel();

            JButton createButton = new JButton("新規作成");
            createButton.setPreferredSize(new Dimension(100,50));
            buttonPanel.add(createButton);

            JButton editButton = new JButton("タスクを編集");
            editButton.setPreferredSize(new Dimension(100,50));
            buttonPanel.add(editButton);

            Container contentPane = getContentPane();
            contentPane.add(TodoPanel);
            contentPane.add(DoingPanel);
            contentPane.add(DonePanel);
            contentPane.add(buttonPanel);
          }
} 
길다.
같은 처리를 하는 곳이 세 군데 있다.
스윙에 라벨과 패널을 만들 때 하나하나 new를 만들어야 해요. 귀찮아요.
따라서 중복 처리된 코드는 다음과 같다.
public class Top extends JFrame{
        /**
        * アプリケーションの起動
        */
        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());

            //TODOタスク表示
            makeTaskPanel("TODO");

            //DOINGタスク表示
            makeTaskPanel("DOING");

            //DONEタスク表示領域
            makeTaskPanel("DONE");

            //ボタン配置
            JPanel buttonPanel = new JPanel();
            TaskRegister taskRegisterPanel = new TaskRegister();
            this.add(taskRegisterPanel);
            taskRegisterPanel.setVisible(false);
            JButton createButton = new JButton("新規作成");

            buttonPanel.add(createButton);

            JButton editButton = new JButton("タスクを編集");
            editButton.setPreferredSize(new Dimension(100,50));
            buttonPanel.add(editButton);

            Container contentPane = getContentPane();
            contentPane.add(buttonPanel);
          }

        public void makeTaskPanel(String panelTitle){
            //titleに指定したタイトルテキストをつけてタスクパネルを作ります
            JPanel mainPanel = new JPanel();
            JPanel titlePanel = new JPanel();
            JLabel titleLabel = new JLabel(panelTitle);
            LineBorder border = new LineBorder(Color.BLACK, 2, true);

            //タスク表示領域配置
            mainPanel.setPreferredSize(new Dimension(300, 600));
            mainPanel.setBackground(Color.WHITE);
            mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.X_AXIS));

            //タイトルを置く用のパネル
            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);

            //タイトル配置
            titleLabel.setFont(new Font("MS ゴシック", Font.BOLD, 32));
            titleLabel.setAlignmentX(0.5f);
            titlePanel.add(titleLabel);

            //枠線
            mainPanel.setBorder(border);

            Container contentPane = getContentPane();
            contentPane.add(mainPanel);
        }
} 
중복되는 것은
1. 필요한 패널, label 등 new
2. 마음대로 크기 조정
할 부분이라서 거기 부분을 방법대로 잘라냈어요.
대상을 향한 응집도가 강할수록 결합도가 낮을수록 좋은 디자인이라고 한다.
되풀이하는 기능을 최대한 집중해서 한쪽을 간단하게 불러낼 수 있게 하자는 말인가.
앞으로도 열심히 하겠습니다.

좋은 웹페이지 즐겨찾기