powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / покритикуйте, пожалуйста код
13 сообщений из 13, страница 1 из 1
покритикуйте, пожалуйста код
    #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
покритикуйте, пожалуйста код
    #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
покритикуйте, пожалуйста код
    #38599185
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

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

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

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

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

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

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

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

Согласен, что криво. Через Vector лучше будет.
...
Рейтинг: 0 / 0
покритикуйте, пожалуйста код
    #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
покритикуйте, пожалуйста код
    #38599221
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,



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

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

За остальное спасибо большое, буду обращать теперь на это внимание.
...
Рейтинг: 0 / 0
покритикуйте, пожалуйста код
    #38599519
avp.mk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mr_virtus=)) Это я в книжке прочитал про такую коллекцию)
В печку её =)
...
Рейтинг: 0 / 0
покритикуйте, пожалуйста код
    #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
покритикуйте, пожалуйста код
    #38599565
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mr_virtus,

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


Рекомендуется всегда писать фигурные скобки.
...
Рейтинг: 0 / 0
покритикуйте, пожалуйста код
    #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
покритикуйте, пожалуйста код
    #38599571
mr_virtus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

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

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

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

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

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


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