又有一个问题,
如何响应最上面那牌tab标签的点击事件?
比如 我点击 “记录管理”,然后响应这一点击动作。

解决方案 »

  1.   

    这个我记得以前也查过,JTabbedPane不能直接响应Mouse,但提供了一个方法getBoundsAt(int index),返回index位置的选项卡边界,是一个Rectangle类型。然后再判断 if rectangle.contains(e.getX(), e.getY())) {...} 。
      

  2.   

    if (rectangle.contains(e.getX(), e.getY())) {...}  少写了个左括号。
      

  3.   

    void addChangeListener(ChangeListener l) 
              将一个 ChangeListener 添加到此选项卡窗格中。 
      

  4.   

    看看这个,简单的做了个响应,点击标签会的在控制台输出一句话。
    import javax.swing.JTabbedPane;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JFrame;
    import java.awt.*;
    import java.awt.event.*;public class MyTabbedPane extends JPanel {
    public MyTabbedPane() {
    super(new GridLayout(1, 1));
    final JTabbedPane tabbedPane = new JTabbedPane();
    Component panel1 = makeTextPanel("One");
    tabbedPane.addTab("One", panel1);
    Component panel2 = makeTextPanel("Two");
    tabbedPane.addTab("Two", panel2);
    Component panel3 = makeTextPanel("Three");
    tabbedPane.addTab("Three", panel3);
    Component panel4 = makeTextPanel("Four");
    tabbedPane.addTab("Four", panel4);

    //添加鼠标监听事件
    tabbedPane.addMouseListener(new java.awt.event.MouseAdapter() {
    public void mouseClicked(MouseEvent e) { //响应鼠标点击事件
    p(e);
    }
    private void p(MouseEvent e) {
    for (int i = 0; i < tabbedPane.getTabCount(); i++) {
    Rectangle rect = tabbedPane.getBoundsAt(i); //拿到标签的边界
    if (rect.contains(e.getX(), e.getY())) { //判断是否点在边界内
    System.out.println("在选项卡" + i + "上点击了鼠标!"); //响应 简单输出一句话
    }
    }
    }
    });

    add(tabbedPane);
    } protected Component makeTextPanel(String text) {
    JPanel panel = new JPanel(false);
    JLabel filler = new JLabel(text);
    filler.setHorizontalAlignment(JLabel.CENTER);
    panel.setLayout(new GridLayout(1, 1));
    panel.add(filler);
    return panel;
    } public static void main(String[] args) {
    JFrame.setDefaultLookAndFeelDecorated(true);
    JFrame frame = new JFrame("MyFrame");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().add(new MyTabbedPane(), BorderLayout.CENTER);
    frame.setSize(400, 200);
    frame.setVisible(true);
    }
    }
      

  5.   

    final tabbedPane = new JTabbedPane();
    ...
    tabbedPane.addChangeListener(new ChangeListener(){
        @Override public void stateChanged(ChangeEvent e){
            System.out.println(tabbedPane.getTitleAt(tabbedPane.getSelectedIndex()));
        }
    });