JTabbedPane ChangeListener

前端 未结 2 942
自闭症患者
自闭症患者 2020-12-30 19:03

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 tab

2条回答
  •  北海茫月
    2020-12-30 19:51

    for example

    import java.awt.*;
    import javax.swing.*;
    import javax.swing.event.ChangeEvent;
    import javax.swing.event.ChangeListener;
    
    public class TestTabbedPane {
    
        public static void main(String[] args) {
            Runnable r = new Runnable() {
    
                @Override
                public void run() {
                    final JPanel ui = new JPanel(new BorderLayout(1, 1));
                    JTabbedPane jtp = new JTabbedPane(JTabbedPane.LEFT);
                    jtp.addTab("Apple", new JLabel("Apple"));
                    jtp.addTab("Banana", new JLabel("Banana"));
                    jtp.addTab("Cherries", new JLabel("Cherries"));
                    jtp.addTab("Grapes", new JLabel("Grapes"));
                    ui.add(jtp, BorderLayout.CENTER);
                    jtp.setPreferredSize(new Dimension(200, 200));
                    jtp.addChangeListener(new ChangeListener() {
    
                        @Override
                        public void stateChanged(ChangeEvent e) {
                            if (e.getSource() instanceof JTabbedPane) {
                                JTabbedPane pane = (JTabbedPane) e.getSource();
                                System.out.println("Selected paneNo : " + pane.getSelectedIndex());
                            }
                        }
                    });
                }
            };
            SwingUtilities.invokeLater(r);
        }
    
        private TestTabbedPane() {
        }
    }
    

    printOut

    run:
    Selected paneNo : 1
    Selected paneNo : 2
    Selected paneNo : 3
    BUILD SUCCESSFUL (total time: 7 seconds)
    

提交回复
热议问题