我有以下代码:
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之后调用。
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/