我需要检测选定的选项卡何时更改,并获取其索引。
以下代码可以运行,但是它会触发与println
当前加载的标签数量相同的次数:
tabbedPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
System.out.println("Tab: " + tabbedPane.getSelectedIndex());
// Prints the string 3 times if there are 3 tabs etc
}
});
正确的做法是什么?先感谢您。
通过JDK 6 Update 26(Windows 7 64位),以下示例代码仅获得一个事件:
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
frame.setBounds(0, 0, 300, 400);
frame.setLayout(null);
final JTabbedPane tabbedPane = new JTabbedPane();
tabbedPane.addTab("One", new JPanel());
tabbedPane.addTab("Two", new JPanel());
tabbedPane.addTab("Three", new JPanel());
tabbedPane.addChangeListener(new ChangeListener() {
public void stateChanged(ChangeEvent e) {
System.out.println("Tab: " + tabbedPane.getSelectedIndex());
}
});
tabbedPane.setBounds(0, 0, 300, 400);
frame.add(tabbedPane);
frame.setVisible(true);
}
您能在调试器中弄清楚为什么监听器被触发了三遍吗?