Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437

Как вызвать конструктор другого класса?

27.10.2013, 22:11. Показов 1986. Ответов 0
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть главное JFrame и при нажатии на кнопку должен вызваться диалог. Нашел пример в интернетах, но там диалог вызывается при нажатии кнопки в main методе, как сделать так чтоб в main вызывался конструктор класса главного окна? мол чтоб было так

Java
1
2
3
public staic void main(String[] args) {
 new JMainFrame();
}
и чтоб потом вызвался диалог при нажатии на кнопку, как написано нижу.

Кликните здесь для просмотра всего текста
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
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
public class MainFrame extends JFrame {
    public static void main(String[] args) {
        final MainFrame mf = new MainFrame();
        JPanel jp = new JPanel();
        JButton but = new JButton("Show modal");
        but.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                MainDialog md = new MainDialog(mf);
                md.setVisible(true);
            }
        });
        jp.add(but);
        mf.setContentPane(jp);
        mf.pack();
        mf.setVisible(true);
    }
 
    private static class MainDialog extends JDialog {
        public MainDialog(final MainFrame mf) {
            super(mf, true);
            JPanel panel = new JPanel();
            JButton okButton = new JButton("OK");
            okButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    mf.setVisible(false);
                }
            });
            panel.add(okButton);
            JButton cancelButton = new JButton("Cancel");
            cancelButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    MainDialog.this.dispose();
                }
            });
            panel.add(cancelButton);
            setContentPane(panel);
            pack();
        }
    }
}


Добавлено через 7 часов 6 минут
Не знаю на сколько это правильно, но это работает, только почему-то каждый раз вывод увеличивается на один раз. Есть предложения как это починить? Или написать правильно?
Кликните здесь для просмотра всего текста
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
import java.awt.event.*;
import javax.swing.*;
 
public class JD extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    private JMenuBar menubar = new JMenuBar();
    private JMenu menu = new JMenu("Options");
    private JMenuItem item = new JMenuItem("Try this");
    JLabel label = new JLabel("label");
    JTextField text = new JTextField(10);
    JPanel panel = new JPanel();
    JButton b = new JButton("get and close");
 
    JD() {
        super("Frame");
        setSize(200, 200);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        menu.add(item);
        menubar.add(menu);
        setJMenuBar(menubar);
        item.addActionListener(this);
        setVisible(true);
    }
 
    public void actionPerformed(ActionEvent evnt) {
        Object source = evnt.getSource();
        if (source == item) {
            new Dialog(new JFrame());
        }
    }
 
    private class Dialog extends JDialog {
        private static final long serialVersionUID = 1L;
 
        Dialog(JFrame frame) {
            super(frame, true);
            setSize(200, 200);
            setLocationRelativeTo(null);
            panel.setLayout(null);
            label.setBounds(10, 10, 50, 15);
            panel.add(label);
            text.setBounds(60, 8, 50, 19);
            panel.add(text);
            add(panel);
            b.setBounds(40, 40, 100, 25);
            panel.add(b);
            b.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evnt) {
                    System.out.println(text.getText());
                    dispose();
                }
            });
            setVisible(true);
        }
    }
 
    public static void main(String[] args) {
        new JD();
    }
}


Добавлено через 3 часа 3 минуты
Все, понял где ошибка. Инициализировал компоненты вне класса, по этому вывод такой кривой был.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.10.2013, 22:11
Ответы с готовыми решениями:

Как в классе А у объекта класса B вызвать метод класса B ?
Есть Класс A и класс B . В классе B лежит объект типа ArrayList , назовём его arrayList, в этом же классе есть метод push() . Возможно ли...

Как вызвать метод из класса библиотеки acm?
Вот этот метод например:

Как получить доступ к CardLayout из другого класса?
Здравствуйте, в общем суть вопроса такова. Есть два класса MainClass и SubClass в MainClasss иметься CardLayout и мне надо изменить панель...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
27.10.2013, 22:11
Помогаю со студенческими работами здесь

Как перенести int переменные из другого класса
// Как бы ConcurrentHashMap переносит стринг / инт. А переменные random , health и dmg у меня инт. Какая команда нужна для инт? ...

Как присвоить значение из JTextField переменной другого класса?
Подскажите как присвоить значение из JTextField для переменной другого класса. У меня есть класс графика синуса и в нем переменая a: ...

Как обратиться к объекту на форме JFrame из другого класса
Здравствуйте! Может быть вопрос, сто раз задавался, но я конкретного решения не нашел. Главная форма создана через редактор среды...

Не видит переменную внутри класса из другого класса
Созданы 2 класса внутри одного, 2-ой класс EHandler не видит переменные из GuiClass в чем может быть проблема?:( package kz.home.gui; ...

Как поменять фон Label из метода? И как занести данные в массив из другого класса
Пишу крестики нолики, есть два лэйбла "игрок 1", "игрок 2". Хочу чтобы фон подсвечивался у игрока чей ход. Не могу найти инфу как к лейблу...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru