JTabbedPane ChangeListener [英] JTabbedPane ChangeListener

查看:187
本文介绍了JTabbedPane ChangeListener的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要检测所选标签何时更改,并获取其索引。



以下代码有效,但它会触发 println 与当前加载的标签数量相同的次数:

  tabbedPane.addChangeListener(new ChangeListener(){ 
public void stateChanged(ChangeEvent e){
System.out.println(Tab:+ tabbedPane.getSelectedIndex());
//如果有3个制表符,则打印字符串3次等等
}
});

这样做的正确方法是什么?提前谢谢。

解决方案

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

你能在调试器中找出为什么听众会被触发三次吗? / p>

I need to detect when the selected tab changes, and get its index.

The following code works, but it fires the println as many times as the amount of tabs currently loaded:

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

What is the correct way of doing this? Thank you in advance.

解决方案

By JDK 6 Update 26 (Windows 7 64-Bit), I only get one event for the following demonstration code:

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

Can you figure out in the debugger why the listener is triggered three times?

这篇关于JTabbedPane ChangeListener的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆