11 / 10 / 4
Регистрация: 08.03.2016
Сообщений: 333

Графический интерфейс

09.04.2017, 16:28. Показов 961. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решил сделать форму при массива графических элементов. Нужно было обращаться к ним. Сделал такой метод в родителе
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
    public void exittheMode(JButton exit, JFrame MF) {
        exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                MF.setVisible(true);
                MF.setSize(400, 310);
            }
        }); 
    }

Полный код родителя
Кликните здесь для просмотра всего текста
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
package classPackage;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.*;
import mainPackage.*;
 
public class classAdminFrame extends JFrame {
    
    protected ModeFrame MF = new ModeFrame();
 
    protected JButton[] button = new JButton [2];
    protected String[] textBtn = {"Расcчитать и отправить стоимость тура", "Выйти из режима"};
    protected Integer[] btncoordxy = {0, 270, 200, 200};
    protected Integer[] btnscale = {255, 140, 30, 30};
    protected Integer[] btnsizefont = {13, 13};
    
    JLabel[] label = new JLabel[7];
    protected String[] textlbl = {"Расчёт стоимости тура", "Заявка есть? -", "", "Стоимость проживания одного туриста за одну ночь -", "Стоимость перевозки туда и обратно -", "Стоимость питания -", "Маржинальный доход (в процентах) -"};
    protected Integer[] lblcoordxy = {110, 0, 120, 0, 0, 0, 0, 0, 30, 30, 60, 90, 120, 150};
    protected Integer[] lblscale = {285, 120, 20, 340, 240, 130, 235, 30, 30, 30, 30, 30, 30, 30};
    protected Integer[] lblsizefont = {20, 14, 16, 14, 14, 14, 14};
    
    JTextField[] textField = new JTextField[4];
    protected Integer[] textFieldcoordxy = {340, 250, 135, 240, 60, 90, 120, 150};
    protected int widthtextField = 50;
    protected int heighttextField = 30;
    protected int textFieldsizefont = 14;
    
    public void setJButton(String textBtn[], Integer btncoordxy[], Integer btnscale[], Integer btnsizefont[], JPanel panel) {
        for (int i = 0; i < 2; i++) {
            button[i] = new JButton();
            button[i].setText(textBtn[i]);
            button[i].setBounds(btncoordxy[i], btncoordxy[i + 2], btnscale[i], btnscale[i + 2]);
            button[i].setFont(new Font("Segoe UI Light", Font.PLAIN, btnsizefont[i]));
            panel.add(button[i]);
        }
    }
    
    protected void setJLabel(String textlbl[], Integer lblcoordxy[], Integer lblscale[], Integer lblsizefont[], JPanel panel) {
        for (int i = 0; i < 7; i++) {
            label[i] = new JLabel();
            label[i].setText(textlbl[i]);
            label[i].setBounds(lblcoordxy[i], lblcoordxy[i + 7], lblscale[i], lblscale[i + 7]);
            label[i].setFont(new Font("Segoe UI Light", Font.PLAIN, lblsizefont[i]));
            panel.add(label[i]);
        }
    }
    
    protected void setJTextField(Integer textFieldcoordxy[], int widthtextField, int heighttextField, int textFieldsizefont, JPanel panel) {
        for (int i = 0; i < 4; i++) {
            textField[i] = new JTextField();
            textField[i].setBounds(textFieldcoordxy[i], textFieldcoordxy[i + 4], widthtextField, heighttextField);
            textField[i].setFont(new Font("Segoe UI Light", Font.PLAIN, textFieldsizefont));
            panel.add(textField[i]);
        }
    }
    
    public JPanel setPanel (JPanel panel, int x, int y, int width, int height) {
        panel.setBounds(x, y, width, height);
        panel.setLayout(null);
        return panel;
    }
    
    public void exittheMode(JButton exit, JFrame MF) {
        exit.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                MF.setVisible(true);
                MF.setSize(400, 310);
            }
        }); 
    }
}

Полный код потомка
Кликните здесь для просмотра всего текста
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
package mainPackage;
 
import java.awt.*;
import javax.swing.*;
 
import classPackage.classAdminFrame;
 
public class AdminFrame extends classAdminFrame {
 
    private JPanel panel = new JPanel();
    
    
    public AdminFrame() {
        getContentPane().setLayout(null);
        setPanel(panel, 10, 11, 415, 320);
        getContentPane().add(panel);
 
        setJButton(textBtn, btncoordxy, btnscale, btnsizefont, panel);
        setJLabel(textlbl, lblcoordxy, lblscale, lblsizefont, panel);
        setJTextField(textFieldcoordxy, widthtextField, heighttextField, textFieldsizefont, panel);
        exittheMode(button[1], MF);
    }
    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    AdminFrame frame = new AdminFrame();
                    frame.setVisible(true);
                    frame.setSize(450, 310);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
}


Добавлено через 1 минуту
Решил сделать тоже самое и для других
Родитель
Кликните здесь для просмотра всего текста
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
package classPackage;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.*;
import mainPackage.*;
 
public class classModeFrame extends JFrame {
    
    protected AdminFrame AF = new AdminFrame();
 
    
    protected JButton[] button = new JButton[2];
    protected String[] textBtn = {"Турагент", "Турист"};
    protected Integer[] btncoordxy = {80, 80, 60, 120};
    protected Integer[] btnscale = {200, 200, 30, 30};
    protected int btnsizefont = 14;
 
    public JPanel setPanel (JPanel panel, int x, int y, int width, int height) {
        panel.setBounds(x, y, width, height);
        panel.setLayout(null);
        return panel;
    }
    
    public JLabel setLabel(String namelabel, String labeltext, int x, int y, int width, int height, int size, JPanel panel) {
        JLabel label = new JLabel();
        label.setName(namelabel);
        label.setText(labeltext);
        label.setBounds(x, y, width, height);
        label.setFont(new Font("Segoe UI Light", Font.PLAIN, size));
        panel.add(label);
        return label;
    }
    
    protected void setJButton(String textBtn[], Integer btncoordxy[], Integer btnscale[], int btnsizefont, JPanel panel) {
        for (int i = 0; i < 2; i++) {
            button[i] = new JButton();
            button[i].setText(textBtn[i]);
            button[i].setBounds(btncoordxy[i], btncoordxy[i + 2], btnscale[i], btnscale[i + 2]);
            button[i].setFont(new Font("Segoe UI Light", Font.PLAIN, btnsizefont));
            panel.add(button[i]);
        }
    }
    
    public void gotoAdminFrame(JButton btnTourAgent, JFrame AF) {
        btnTourAgent.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                AF.setVisible(true);
                AF.setSize(400, 310);
            }
        }); 
    }
}


Потомок
Кликните здесь для просмотра всего текста
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
package mainPackage;
 
import classPackage.classModeFrame;
 
import java.awt.*;
import javax.swing.*;
 
public class ModeFrame extends classModeFrame {
    
    private JPanel panel = new JPanel();
 
    
    public ModeFrame() {
        
        getContentPane().setLayout(null);
        setPanel(panel, 10, 11, 415, 240);
        getContentPane().add(panel);
        
        setLabel("chooseMode", "Select mode", 145, 0, 80, 30, 14, panel);
        setJButton(textBtn, btncoordxy, btnscale, btnsizefont, panel);
        gotoAdminFrame(button[0], AF); 
    }
 
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ModeFrame frame = new ModeFrame();
                    frame.setVisible(true);
                    frame.setSize(400, 310);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
}


После добавления данного метода во второго родителя, начали появляться ошибки
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
    at sun.awt.Win32GraphicsConfig.getBounds(Native Method)
    at sun.awt.Win32GraphicsConfig.getBounds(Unknown Source)
    at java.awt.Window.init(Unknown Source)
    at java.awt.Window.<init>(Unknown Source)
    at java.awt.Frame.<init>(Unknown Source)
    at java.awt.Frame.<init>(Unknown Source)
    at javax.swing.JFrame.<init>(Unknown Source)
    at classPackage.classAdminFrame.<init>(classAdminFrame.java:10)
    at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
    at classPackage.classModeFrame.<init>(classModeFrame.java:12)
    at mainPackage.ModeFrame.<init>(ModeFrame.java:13)
    at classPackage.classAdminFrame.<init>(classAdminFrame.java:12)
    at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
    at classPackage.classModeFrame.<init>(classModeFrame.java:12)
    at mainPackage.ModeFrame.<init>(ModeFrame.java:13)
    at classPackage.classAdminFrame.<init>(classAdminFrame.java:12)
    at mainPackage.AdminFrame.<init>(AdminFrame.java:13)
........


Почему так? Ведь когда добавил один метод, то все хорошо. А после второго ошибки
Я предполагаю что у меня рекурсия (как это исправить я не знаю)

Добавлено через 1 час 35 минут
Как и предполагал у меня была рекурсия
Решение:
В родителе
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
    public void gotoAdminFrame(JButton btnTourAgent, [B]AdminFrame admin[/B]) {
        btnTourAgent.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                [B]AF = admin;[/B]
                dispose();
                AF.setVisible(true);
                AF.setSize(400, 310);
            }
        }); 
    }


Запустилась но теперь при нажатии на кнопку в ModeFrame выходит следующая ошибка
Кликните здесь для просмотра всего текста
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
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at classPackage.classAdminFrame$1.actionPerformed(classAdminFrame.java:76)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.awt.EventQueue$4.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.04.2017, 16:28
Ответы с готовыми решениями:

Графический интерфейс
есть класс-клетка как ее связать с изображением на интерфейсе?

Графический интерфейс
Скажите, пожалуйста, допустимо ли размещать различные swing-виджеты на диалоговом окне? Я имею ввиду не на панели, которая принадлежит...

Графический интерфейс
вот у меня есть программа перебор сочетаний с повторением и без, и подсчет по формуле кол-во этих сочетаний....как мне связать кнопки с...

4
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7384 / 4808 / 1244
Регистрация: 30.03.2015
Сообщений: 13,635
Записей в блоге: 29
09.04.2017, 16:42
Цитата Сообщение от damirqa Посмотреть сообщение
(classAdminFrame.java:76)
что у тебя в 76 строке этого класса?
0
11 / 10 / 4
Регистрация: 08.03.2016
Сообщений: 333
10.04.2017, 11:14  [ТС]
Welemir1, Я немного код изменил. Суть в том, что есть две формы. Одна ModeFrame другая AdminFrame. На ModeFrame есть кнопка, нажимая открывает AdminFrame и закрывает себя(ModeFrame). В AdminFrame тоже самое только в ModeFrame. Происходит рекурсия. Я знаю как от нее избавиться, но если есть еще где-то рекурсия то вроде как этот метод уже не помогает.

Кликните здесь для просмотра всего текста
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
package mainPackage;
 
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.*;
import classPackage.*;
 
public class ModeFrame extends classModeFrame {
 
    private JPanel panel = new JPanel();
    private ClientFrame CF = new ClientFrame();
    private AdminFrame AF = new AdminFrame();
    
    public ModeFrame() {
        
        getContentPane().setLayout(null);
        setPanel(panel, 10, 11, 415, 240);
        getContentPane().add(panel);
        
        setLabel("lblselectmode", "Выберите режим", 145, 0, 80, 30, 14, panel);
        setJButton(textBtn, btncoordxy, btnscale, btnsizefont, panel);
        
        gotoAdminFrame(button[0], AF);
        gotoClientFrame(button[1], CF);
        
    }
    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    ModeFrame frame = new ModeFrame();
                    frame.setVisible(true);
                    frame.setSize(400, 310);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
    
    public void gotoAdminFrame (JButton button, AdminFrame frame){
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                frame.setVisible(true);
                frame.setSize(445, 310);
                }
            });
        }
    
    public void gotoClientFrame (JButton button, ClientFrame frame){
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                frame.setVisible(true);
                frame.setSize(420, 380);
                }
            });
        }
}


Кликните здесь для просмотра всего текста
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
package mainPackage;
 
import java.awt.*;
import javax.swing.*;
import classPackage.*;
 
public class AdminFrame extends classAdminFrame {
 
    private JPanel panel = new JPanel();
 
    public AdminFrame() {
        
        getContentPane().setLayout(null);
        setPanel(panel, 10, 11, 415, 320);
        getContentPane().add(panel);
        
        setJLabel(textlbl, lblcoordxy, lblscale, lblsizefont, panel);
        setJTextField(textFieldcoordxy, widthtextField, heighttextField, textFieldsizefont, panel);
        setJButton(textBtn, btncoordxy, btnscale, btnsizefont, panel);
    }
    
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    AdminFrame frame = new AdminFrame();
                    frame.setVisible(true);
                    frame.setSize(445, 310);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
 
 
 
}


Это рабочий код, потому что в AdminFrame нет прослушки на кнопку, которая возвращает обратно на ModeFrame

Если добавить этот метод, то появляется рекурсия
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
private ModeFrame MF = new ModeFrame();
 
    public void exittheMode (JButton button, ModeFrame frame){
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                frame.setVisible(true);
                frame.setSize(445, 310);
                }
            });
        }
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7384 / 4808 / 1244
Регистрация: 30.03.2015
Сообщений: 13,635
Записей в блоге: 29
10.04.2017, 17:50
эээ...ну круто, спасибо за подробности. Но ты спрашивал про ошибку NPE, она уже не актуальна?
0
11 / 10 / 4
Регистрация: 08.03.2016
Сообщений: 333
10.04.2017, 21:18  [ТС]
Welemir1,
76 строчка была frame.setVisible(true);
в
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
    public void exittheMode (JButton button, ModeFrame frame){
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                dispose();
                frame.setVisible(true);
                frame.setSize(445, 310);
                }
            });
        }

Отчасти актуальна, так как могу попытаться откатиться
Но больше всего хотелось бы узнать как правильно сделать переходы (может я что-то неверно делаю)- это в корне решает проблему
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.04.2017, 21:18
Помогаю со студенческими работами здесь

Графический интерфейс
Подскажите пожалуйста, как создать графический интерфейс (если можно, поподробней)? :scratch:

Графический интерфейс
Помогите, пожалуйста, сделать графический интерфейс для шифра. только окошко ввода-кнопку зашифровать-и вывод результата. Очень срочно...

Графический интерфейс + данные
Имеется графический интерфейс, который в будущем будет активно использовать много различных методов (работа с сетью, работа с файлами и...

Не могу создать графический интерфейс
Решил написать игрушку Dice Wars в качестве курсовика, но не знаю как сделать графический интерфейс, т.к. джаву только начал изучать. ...

Графический интерфейс (самые азы)
Подскажите, пожалуйста. Написала код. Кнопки идут одна за другой. А как сделать, чтобы одна кнопка была ниже второй? public...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
EmBitz, создание проекта, отладка, прошивка
locm 15.07.2025
Создание проекта для Blue Pill (STM32F103C8T6) в EmBitz 2. 30, написания кода blink, запуск отладки в ОЗУ, заливка релизной прошивки во flash используя ST-Link и др. . . .
Трассировка корутин Kotlin с OpenTelemetry
mobDevWorks 14.07.2025
Асинхронное программирование меняет правила игры, особенно когда речь заходит о трассировке операций. В Kotlin с его корутинами эта проблема приобретает особый оттенок, который я хотел бы детально. . .
Облачные приложения на Rust: руководство по архитектуре микросервисов
golander 13.07.2025
Когда я впервые взялся за проектирование облачной платформы для одного из наших клиентов, выбор стоял между привычными Go и Java. Но после нескольких месяцев разработки микросервисной системы,. . .
Как Node.js выполняет асинхронные операции
Reangularity 13.07.2025
Каждый раз, когда я рассказываю про Node. js, возникает один и тот же вопрос: "Как эта штука может быть быстрой, если JavaScript — однопоточный язык?" И это действительно кажется парадоксом. Ведь в. . .
Как писать чистый, тестируемый и качественный код на Python
py-thonny 12.07.2025
Помню свой первый проект на Python. Работал тогда быстро, грязно, лишь бы работало. Код был похож на запутанный клубок - переменные по одной букве, функции на 200 строк, комментарии отсутствовали как. . .
Blazor и контроллер сервопривода IoT Meadow Maple
Wired 11.07.2025
Я решил разобраться, как можно соединить современные веб-технологии с миром "железа". Интересная комбинация получилась из Blazor в качестве веб-интерфейса и микроконтроллера Meadow с его веб-сервером. . .
Генерация OpenQASM из кода Q#
EggHead 10.07.2025
Летом 2024-го я начал эксперименты с библиотекой Q# Bridge, и знаете что? Она оказалась просто находкой для тех, кто работает на стыке разных квантовых экосистем. Основная фишка этой библиотеки -. . .
Изучаем новый шаблон ИИ-чата .NET AI Chat Web App
stackOverflow 10.07.2025
В . NET появилось интересное обновление - новый шаблон ИИ-чата под названием . NET AI Chat Web App. Когда я впервые наткнулся на анонс этого шаблона, то сразу понял, что Microsoft наконец-то. . .
Результаты исследования от команды ARP (июль 2025 г.)
Programma_Boinc 10.07.2025
Результаты исследования от команды ARP (июль 2025 г. ) Африканский проект по дождям (ARP) World Community Grid снова запущен! Мы рады поделиться обновленной информацией о нашем прогрессе с осени. . .
Angular vs Svelte - что лучше?
Reangularity 09.07.2025
Сегодня рынок разделился на несколько четких категорий: тяжеловесы корпоративного уровня (Angular), гибкие универсалы (React), прогрессивные решения (Vue) и новая волна компилируемых фреймворков. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru