java - 如何同步java事件中更新的值

标签 java swing mouselistener jtabbedpane actionevent

我有以下代码:

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

并且buttonActionPerformedtabbedPaneClick之后调用。

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() 如果源不是单击的选项卡式 Pane ,则必须将 X 和 Y 转换为选项卡式 Pane 的坐标

参见 SwingUtilities 的方法

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

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

关于java - 如何同步java事件中更新的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27183020/

相关文章:

java - 当我向框架添加 JPanel 时,图形被遮挡(java)

java - 存储批处理作业的密码

java - 在 Eclipse IDE 中播放音频文件;但不是 JAR 文件

java - swing调用父窗体的方法

java - 在 2 个 Jtree 之间拖放

Java( Swing ): MouseMoved not working at all

java - 如何在运行JSP页面之前运行Servlet?

java - 编辑递归算法: passing array instead of string as an argument to save results instead of printing

java - 扫描仪出现 NullPointerException

java - 当您在 JTextArea 上选择行时如何知道行号? [JAVA]