Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / покритикуйте, пожалуйста код / 13 сообщений из 13, страница 1 из 1
28.03.2014, 13:07
    #38599086
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
1. Программа рисует главный фрэйм(mainFrame). На главом фрейме три кнопки Student, Faculty, Print.
2. При нажатии на Student или Faculty - создается новый фрейм(dataFrame), в котором есть поля name, age, degree и три кнопки:
accept - записывает информацию в массив о персоне, clear - очищается dataFrame, close - закрывает dataFrame
3. При нажатии на кнопку Print in mainFrame программа выводит в консоль список персон из массива


Код: java
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.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class MyProg {
    public static void main(String[] args) {
        mainFrame frame = new mainFrame("the database");
    }
}

class mainFrame extends JFrame {
    public mainFrame(String s) {
        super(s);
        setSize(300, 300);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        MyPanel panel = new MyPanel();
        add(panel);
        setVisible(true);
    }
}

class MyPanel extends JPanel {
    public MyPanel(){
        JButton butStudent = new JButton("Student data");
        JButton butFaculty = new JButton("Faculty data");
        JButton butPrint = new JButton("Print the list");
        add(butStudent);
        add(butFaculty);
        add(butPrint);
        ActionListener myListener = new ActionListener()
        {
            public void actionPerformed(ActionEvent e)
            {
                String buttonLabel = e.getActionCommand();
                if ((buttonLabel == "Student data") | (buttonLabel == "Faculty data"))
                    makeDataFrame(buttonLabel);
                if (buttonLabel == "Print the list")
                    printList();
            }
        };
        butStudent.addActionListener(myListener);
        butFaculty.addActionListener(myListener);
        butPrint.addActionListener(myListener);
    }

    private void makeDataFrame(String viewFrame) {
        Frame myDataFrame = new DataFrame(viewFrame);
    }

    private void printList() {
        People[] peopleList = DataFrame.getPeople();
        for (int i = 0; i < 10; i++){
            peopleList[i].print();
        }
    };
}

class DataFrame extends JFrame {

    static People[] myPeople = new People[10];
    static int nextIndex = 0;
    final String peopleLabel;
    JTextField nameField;
    JTextField ageField;
    JTextField degreeField;

    public DataFrame(String label){

        peopleLabel = label;

        JPanel buttonPan = new JPanel();
        JPanel fieldPan = new JPanel();
        JLabel nameLabel = new JLabel("Name:");
        nameField = new JTextField(10);
        ageField = new JTextField(10);
        degreeField = new JTextField(10);

        fieldPan.add(nameLabel);
        fieldPan.add(nameField);
        if (peopleLabel == "Student data") {
            JLabel ageLabel = new JLabel("Age:");
            fieldPan.add(ageLabel);
            fieldPan.add(ageField);
        }
        if (peopleLabel == "Faculty data") {
            JLabel degreeLabel = new JLabel("Degree:");
            fieldPan.add(degreeLabel);
            fieldPan.add(degreeField);
        }


        ActionListener myListener = new ActionListener()
        {
            public void actionPerformed(ActionEvent e){
                String labelBut = e.getActionCommand();
                if ((labelBut == "Accept") & (peopleLabel == "Student data"))
                    addStudent();
                if ((labelBut == "Accept") & (peopleLabel == "Faculty data"))
                    addFaculty();
                if (labelBut == "Clear")
                    clear();
                if (labelBut == "Close")
                    close();
            }
        };
        JButton acceptBut = new JButton("Accept");
        JButton clearBut = new JButton("Clear");
        JButton closeBut = new JButton("Close");
        acceptBut.addActionListener(myListener);
        clearBut.addActionListener(myListener);
        closeBut.addActionListener(myListener);
        buttonPan.add(acceptBut);
        buttonPan.add(clearBut);
        buttonPan.add(closeBut);
        setLayout(new GridLayout(2, 1));
        add(fieldPan);
        add(buttonPan);
        setSize(400, 200);
        setVisible(true);
    }

    void addStudent() {
        if (nextIndex > 9) {
            System.out.println("Array is full");
            return;
        }
        myPeople[nextIndex] = new Student(nameField.getText(), Integer.parseInt(ageField.getText()));
        nextIndex++;
    }

    void addFaculty() {
        if (nextIndex > 9) {
            System.out.println("Array is full");
            return;
        }
        myPeople[nextIndex] = new Faculty(nameField.getText(), degreeField.getText());
        nextIndex++;
    }

    void clear() {
        nameField.setText("");
        if (peopleLabel == "Student data")
            ageField.setText("");
        if (peopleLabel == "Faculty data")
            degreeField.setText("");
    }

    void close() {
        this.dispose();
    }
    public static People[] getPeople() {
        return myPeople;
    };
}

abstract class People {
    String name;
    public People(String name){
        this.name = name;
    };
    abstract void print();
}

class Student extends People {
    int age;
    public Student(String name, int age) {
        super(name);
        this.age = age;
    };
    void print() {
        System.out.println("Student " + name + ", " + age + " years");
    }
}

class Faculty extends People {
    String degree;
    public Faculty(String name, String degree) {
        super(name);
        this.degree = degree;
    };
    void print() {
        System.out.println("Faculty " + name + ", " + degree+ " degree");
    }
}

Спасибо.
...
Рейтинг: 0 / 0
28.03.2014, 13:37
    #38599128
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
mainFrame - класс с маленькой буквы
"the database" - бессмысленный тайтл и почему-то в lower case
People - это "народ". В вашем случае больше подходит слово Person.
MyProg, MyPanel, DataFrame - названия не отражающие назначение классов.
В ActionListener не стандартная расстановка скобок. Используется тупой if-else диспатч. Гораздо лучше использовать концепцию Action. Один Action на одно действие. Диспатч с привязкой к тексту кнопки это тоже криво. Любое переименование текста, требует исправления в диспетчере. А про интернационализацию можно вообще забыть.
Строки сравниваются == . Работать-то оно работает но через side effect.
Использование | и &, там где обычно применяется || и && выдаёт не знание и непонимание различия этих операторов.
Очень слабое разделениие на слои (MVC, MVP, MVVM, Abstract Layer). Есть Value Object сущности и есть GUI классы, которые делают всё-всё-всё.

Именование butPrint конфликтует с английским словом but. Мне больше импонируют нотации btnPrint или printButton.
System.out.println("Array is full"); - не очень понял смысл вывода на консоль в GUI приложении.

Константы вроде "Faculty data" встречаются в таком маленьком приложении аж по 5 раз. То есть переименование в одном месте сразу ломает остальные 4.

"Магические константы"
Код: java
1.
2.
3.
 new People[10]
 for (int i = 0; i < 10; i++){
(nextIndex > 9)


Почему 9 и 10? Почему в 4х разных местах? Снова если в одном поменять, остальные 3 сломаются?
...
Рейтинг: 0 / 0
28.03.2014, 14:17
    #38599185
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
Blazkowicz,

Спасибо большое за подробный ответ!

автор"the database" - бессмысленный тайтл и почему-то в lower case

Название окна. Почему бессымысленный?

авторОдин Action на одно действие

То есть сколько кнопок, столько нужно и классов ActionListener?

авторПочему 9 и 10? Почему в 4х разных местах? Снова если в одном поменять, остальные 3 сломаются?

Так по условию было, что 10 элементов. А 9 - проверка на заполненность массива,
nextIndex - следующий элемент массива, в который будет писаться.

Согласен, что криво. Через Vector лучше будет.
...
Рейтинг: 0 / 0
28.03.2014, 14:27
    #38599204
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
mr_virtusНазвание окна. Почему бессымысленный?

Потому что название должно быть конкретным. "База данных преподавателей и студентов" вместо вашего "та самая база данных".
Артикли на GUI обычно не используют.

mr_virtusТо есть сколько кнопок, столько нужно и классов ActionListener?

Action а не ActionListener. Action обозначает конкретное действие и может быть привязан не только к кнопке.

mr_virtusТак по условию было, что 10 элементов. А 9 - проверка на заполненность массива,
nextIndex - следующий элемент массива, в который будет писаться.

Вам не хватает констаны типа RECORS_LIMIT, MAX_RECORDS, MAX_PERSONS, которая бы глобально задавала это лимит, а не в 4х разных местах.

mr_virtusСогласен, что криво. Через Vector лучше будет.
Прям на машине времени в 90е переместился от ваших слов. Какой, нафиг, Vector в Java в 21 веке?
...
Рейтинг: 0 / 0
28.03.2014, 14:34
    #38599221
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
Blazkowicz,



авторПрям на машине времени в 90е переместился от ваших слов. Какой, нафиг, Vector в Java в 21 веке?

=)) Это я в книжке прочитал про такую коллекцию)

За остальное спасибо большое, буду обращать теперь на это внимание.
...
Рейтинг: 0 / 0
28.03.2014, 18:23
    #38599519
avp.mk
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
mr_virtus=)) Это я в книжке прочитал про такую коллекцию)
В печку её =)
...
Рейтинг: 0 / 0
28.03.2014, 19:06
    #38599554
no56892
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
mr_virtus,
Вот щас покритикую, я и сам нуб в жава, но вот это:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public void actionPerformed(ActionEvent e){
                String labelBut = e.getActionCommand();
                if ((labelBut == "Accept") & (peopleLabel == "Student data"))
                    addStudent();
                if ((labelBut == "Accept") & (peopleLabel == "Faculty data"))
                    addFaculty();
                if (labelBut == "Clear")
                    clear();
                if (labelBut == "Close")
                    close();
            }


и это:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
void clear() {
        nameField.setText("");
        if (peopleLabel == "Student data")
            ageField.setText("");
        if (peopleLabel == "Faculty data")
            degreeField.setText("");
    }
//зачем здесь вообще проверять к-либо условия?



это фэйл по-моему.
Про |, & и сравнение строк уже сказали.
ИМХО Вам нужно (сейчас сам так стараюсь делать): выбрать любой баг (на оф. баг-трекере) где-нибудь в библиотеках известных, напр: EE, Spring, Apache commons и т.д. и попытаться найти и исправить. Сам процесс изучения чужого кода + процесс возможного исправления с минимальными издержками очень прокачивает скилл. инфа 100%. И еще можно почитать про паттерны. Тогда, есть шанс, что у Вас меньше будет этой лапши из if.
...
Рейтинг: 0 / 0
28.03.2014, 19:35
    #38599565
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
mr_virtus,

Да, забыл указать, что при переносе тела условия на следующую строку
Код: java
1.
2.
if ((labelBut == "Accept") & (peopleLabel == "Faculty data"))
                    addFaculty();


Рекомендуется всегда писать фигурные скобки.
...
Рейтинг: 0 / 0
28.03.2014, 19:47
    #38599570
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
no56892,

спасибо.

Код: java
1.
2.
3.
4.
5.
6.
void clear() {
        nameField.setText("");
        if (peopleLabel == "Student data")
            ageField.setText("");
        if (peopleLabel == "Faculty data")
            degreeField.setText("");



Да, тут явно можно и без if.=)

А про баг-трекеры, если не сложно, можете пару ссылок кинуть?
...
Рейтинг: 0 / 0
28.03.2014, 19:48
    #38599571
mr_virtus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
Blazkowicz,

авторДа, забыл указать, что при переносе тела условия на следующую строку
if ((labelBut == "Accept") & (peopleLabel == "Faculty data"))
addFaculty();

Рекомендуется всегда писать фигурные скобки.

Ну да.
...
Рейтинг: 0 / 0
29.03.2014, 00:11
    #38599667
Паша01
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
no56892на оф. баг-трекере
А это что такое, дайте ссылку!
...
Рейтинг: 0 / 0
29.03.2014, 00:15
    #38599670
redwhite90
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
Blazkowicz,
BlazkowiczКакой, нафиг, Vector в Java в 21 веке?

Он перестал быть депрекатнутым
...
Рейтинг: 0 / 0
20.10.2014, 02:46
    #38781364
Nadar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
покритикуйте, пожалуйста код
mr_virtus,

Знакомое задание =). Ты случаем не писал на Qt лабораторную с отрисовкой точек разными потоками? Я был бы очень рад найти хоть какую-нибудь помощь, так как уже запарился искать ошибку =(.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / покритикуйте, пожалуйста код / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]