Форум программистов, компьютерный форум, киберфорум
Java: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
11 / 10 / 3
Регистрация: 15.11.2015
Сообщений: 250

JTabbedPane событие ChangeListener

21.08.2024, 08:26. Показов 1023. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста.
Возник вопрос относительно события переключения табов, обьекта JTabbedPane.
Вопрос в том, почему не работает событие ChangeListener если создание JFrame
и JTabbedPane делается сразу в главной функции: public static void main(String[] args)

Но если делать реализацию JFrame и JTabbedPane в отдельном классе, наследуя от JFrame
И потом вызывая обьект JFrame в главной функции void main(String[] args)

То переключение табов ChangeListener абсолютно хорошо работает.

Почему не работает в первом случае и работает во втором.
Вот такой тонкий вопрос

Пример Не рабочий:

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
public static void main(String[] args) {
        
        JFrame frame = new JFrame();
        frame.setTitle(" JTabbedPane ChangeListener"); 
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setLayout(new BorderLayout());
        
        JTabbedPane tabPanel = new JTabbedPane(); 
        tabPanel.addTab("Tab 1", new JPanel()); 
        tabPanel.addTab("Tab 2", new JPanel()); 
        tabPanel.addTab("Tab 3", new JPanel()); 
        
        // Здесь ChangeListener Не работает
        tabPanel.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
       
            }         
        });
        
        frame.add(tabPanel, BorderLayout.CENTER);
        frame.setVisible(true);
    }
Пример рабочий:

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
public class MainFrame extends JFrame{
  
    MainFrame(){
 
        this.setTitle(" JTabbedPane ChangeListener");       
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
 
        JTabbedPane tabPanel = new JTabbedPane(); 
        tabPanel.addTab("Tab 1", new JPanel()); 
        tabPanel.addTab("Tab 2", new JPanel()); 
        tabPanel.addTab("Tab 3", new JPanel()); 
        
        this.add(tabPanel, BorderLayout.CENTER);
 
//-------------------------   Переход по закладкам   ------------------------------------
 
 // Здесь ChangeListener четко работает
        tabbedPane.addChangeListener(new ChangeListener(){
            @Override
            public void stateChanged(ChangeEvent e) {
 
                if(tabbedPane.getSelectedIndex()==0){
                    JOptionPane.showMessageDialog(null, "Сообщение 1", " Заголовок", JOptionPane.PLAIN_MESSAGE); 
                }
                if(tabbedPane.getSelectedIndex()==1){
                     JOptionPane.showMessageDialog(null, "Сообщение 2", " Заголовок", JOptionPane.PLAIN_MESSAGE);
                }
                if(tabbedPane.getSelectedIndex()==2){
                     JOptionPane.showMessageDialog(null, "Сообщение 3", " Заголовок", JOptionPane.PLAIN_MESSAGE);
                }   
            }
        });
 
        this.setVisible(true);
    } // end MainFrame()
 
 
//                                    MAIN    
   
    public static void main(String[] args) {
        new MainFrame();  
    }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.08.2024, 08:26
Ответы с готовыми решениями:

ChangeListener срабатывает только один раз
Новичок javafx, нужно было сделать часы, после смены времени на которых будет вызываться нужное мне действие, ChangeListener срабатывает...

JTabbedPane
... JTabbedPane tp = new JTabbedPane(); tp.addTab("1", new JScrollPane(new JTextArea("One"))); tp.addTab("2", new JScrollPane(new...

JTabbedPane + БД
Есть JTabbedPane, в ней 2 вкладки с таблицами. На первой вкладке таблица в которую выводятся данные из таблицы БД. Подскажите, пожалуйста,...

2
 Аватар для andrey_f
884 / 537 / 228
Регистрация: 21.02.2011
Сообщений: 5,705
21.08.2024, 10:46
Цитата Сообщение от maxika Посмотреть сообщение
Почему не работает в первом случае и работает во втором.
В первом примере, когда вы создаете JTabbedPane и добавляете ChangeListener в методе main, вы устанавливаете видимость окна (frame.setVisible(true)) перед тем, как окно полностью настроено. Однако в Java Swing, вызов setVisible(true) инициирует создание и отображение графического интерфейса. Это может привести к ситуации, когда некоторые события обрабатываются до их правильной инициализации.
Цитата Сообщение от maxika Посмотреть сообщение
Пример Не рабочий:
вроде так должен работать, проверяйте:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void main(String[] args) {
    JFrame frame = new JFrame();
    frame.setTitle("JTabbedPane ChangeListener");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
    frame.setLayout(new BorderLayout());
 
    JTabbedPane tabPanel = new JTabbedPane();
    tabPanel.addTab("Tab 1", new JPanel());
    tabPanel.addTab("Tab 2", new JPanel());
    tabPanel.addTab("Tab 3", new JPanel());
 
    tabPanel.addChangeListener(new ChangeListener() {
        @Override
        public void stateChanged(ChangeEvent e) {
            // Здесь вы можете обрабатывать события переключения между вкладками
        }
    });
 
    frame.add(tabPanel, BorderLayout.CENTER);
    frame.setVisible(true); // Убедитесь, что setVisible вызывается в конце
}
0
11 / 10 / 3
Регистрация: 15.11.2015
Сообщений: 250
21.08.2024, 17:14  [ТС]
Извиняюсь, но вы показали копию моего примера, который не работает.

Добавлено через 2 часа 10 минут
Неужели это глюк или есть конкретная обьяснимая причина

Добавлено через 4 часа 3 минуты
Спасибо решение найдено.
Просто IDE NetBeans не дает иногда подсказки по import.
Нужно было сделать import
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.08.2024, 17:14
Помогаю со студенческими работами здесь

JTabbedPane
Добрый день. Помогите, пожалуйста, разобраться. Сделала два класса: MyForm и Pane_Product . При запуске программы создаются две вкладки -...

JTabbedPane no add
ПОЧЕМУ НЕ Получается присвоить к Jpanel через метод add JTabbedPane если убрать строчку в коде jPanel.add(tabbedPane); то ошибка исчезает...

Фокусировка в JTabbedPane
Есть наследник JComponent который имплементит KeyListener и отрабатывает нажатие клавиш. При помещении JComponent в JTabbedPane отловить...

Вкладки JTabbedPane
Казалось бы элементарно - загуглил класс и работает. Но не работает. final JTabbedPane tabbedPane = new JTabbedPane(); ...

JTabbedPane слева
Можно ли как то расположить вкладки слева? Добавлено через 48 минут С этим разобрался, другой вопрос: 2)Можно ли как то задать...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 30.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru