我有以下代码:

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);
 }}


在tabbedPaneClick之后调用buttonActionPerformed。

tabbedPaneClick中的tabbedPaneID从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(这样我就可以取消多个分配)?对问题进行简单的解释将非常有用。

最佳答案

看起来问题是单击了选项卡索引检测(-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)


将选项卡式窗格和事件源传递到此处。

09-05 16:15