Как синхронизировать значения, обновленные в событиях Java

1

У меня есть следующий код:

class A extends javax.swing.JFrame
{
   int tabbedPaneID=0;
   javax.swing.JTabbedPane tbbdPane;
//1
private void tabbedPaneClick(java.awt.event.MouseEvent evt) {
      tabbedPaneID=tbbdPane.getUI().tabForCoordinate(tbbdPane, evt.getX(), evt.getY());
      if(domainTabbedPaneID>=0)
              jTbbdPnApp.setSelectedIndex(domainTabbedPaneID);
      else
              return;
      System.out.println(domainTabbedPaneID);
}

//2
private void buttonActionPerformed(java.awt.event.ActionEvent evt) { 
        System.out.println(tabbedPaneID);        
 }}

и buttonActionPerformed вызывается после tabbedPaneClick.

Вкладка tabbedPaneID в tabbedPaneClick изменяется от 1 до 5, но внутри buttonActionPerformed значение сохраняет -1 (иногда это показывает 3,4 и т.д.). т.е. при нажатии вкладки 2 (tabbedPaneClick) я нахожу значение 2, но при нажатии кнопки (buttonActionPerformed) показано значение -1?

Следующая модификация устраняет проблему:

//2
private void buttonActionPerformed(java.awt.event.ActionEvent evt) { 
        tabbedPaneID=tbbdPane.getSelectedIndex();
        System.out.println(tabbedPaneID);        
}

Но есть ли лучший способ синхронизации tabbedPaneID по этим двум функциям (чтобы я мог избавиться от нескольких назначений)? Простое объяснение проблемы будет очень полезно.

Теги:
swing
mouselistener
actionevent
jtabbedpane

1 ответ

2
Лучший ответ

Похоже, что нажатие кнопки индексирования индексирования индекса (-1) означает неправильные координаты.

tabbedPaneID=tbbdPane.getUI().tabForCoordinate(tbbdPane, evt.getX(), evt.getY());

Здесь X и Y должны находиться в координатном пространстве tabbedPane. Проверьте evt.getSource() если источник не является областью с вкладками с вкладками, вам необходимо преобразовать координаты X и Y в таблицу

См. Метод SwingUtilities

public static Point convertPoint(Component source,int x, int y,Component destination)

пройдите там вкладку и источник события.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню