Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
11 / 10 / 4
Регистрация: 08.03.2016
Сообщений: 333
1

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

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

Author24 — интернет-сервис помощи студентам
Решил сделать форму при массива графических элементов. Нужно было обращаться к ним. Сделал такой метод в родителе
Кликните здесь для просмотра всего текста
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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.04.2017, 16:28
Ответы с готовыми решениями:

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

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

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

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

4
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
09.04.2017, 16:42 2
Цитата Сообщение от damirqa Посмотреть сообщение
(classAdminFrame.java:76)
что у тебя в 76 строке этого класса?
0
11 / 10 / 4
Регистрация: 08.03.2016
Сообщений: 333
10.04.2017, 11:14  [ТС] 3
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
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
10.04.2017, 17:50 4
эээ...ну круто, спасибо за подробности. Но ты спрашивал про ошибку NPE, она уже не актуальна?
0
11 / 10 / 4
Регистрация: 08.03.2016
Сообщений: 333
10.04.2017, 21:18  [ТС] 5
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
10.04.2017, 21:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.04.2017, 21:18
Помогаю со студенческими работами здесь

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

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

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

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

Некорректно отрисовывается графический интерфейс
Здравствуйте. Создаю игру, содержащую пока четыре java-класса. При запуске стартовая страница, код...

Графический интерфейс для шифра Гронсфельда
Помогите, пожалуйста, с графическим интерфейсом для шифра: import...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru