Java JTabbedPane触发事件

Java JTabbedPane触发事件,java,swing,actionlistener,jtabbedpane,changelistener,Java,Swing,Actionlistener,Jtabbedpane,Changelistener,我想在单击“+”选项卡时触发一个事件(并且不存在其他选项卡)。基本上,我希望“+”选项卡像按钮一样工作。我不太确定该使用哪种类型的侦听器。我该怎么做 import java.awt.Dimension; import java.awt.EventQueue; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.event.ChangeEv

我想在单击“+”选项卡时触发一个事件(并且不存在其他选项卡)。基本上,我希望“+”选项卡像按钮一样工作。我不太确定该使用哪种类型的侦听器。我该怎么做

import java.awt.Dimension;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class JTPTest extends JTabbedPane {



    public JTPTest() {

        this.addChangeListener(new ChangeListener() {

            public void stateChanged(ChangeEvent changeEvent) {
                System.out.println(changeEvent);
            }

        });

        JPanel blankJPanel = new JPanel();
        this.addTab("+", blankJPanel);

    }

    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                JFrame frame = new JFrame();
                frame.add(new JTPTest());

                frame.setSize(500, 500);
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.setVisible(true);

            }
        });

    }
}
尝试:

更新

只是一个替代版本,无需修改模型行为

更新2 似乎我最终做了类似的事情,请将其称为此问题的“最佳”解决方案。

尝试:

更新

只是一个替代版本,无需修改模型行为

更新2 似乎我最终做了类似的事情,请将其称为此问题的“最佳”解决方案。

尝试:

更新

只是一个替代版本,无需修改模型行为

更新2 似乎我最终做了类似的事情,请将其称为此问题的“最佳”解决方案。

尝试:

更新

只是一个替代版本,无需修改模型行为

更新2
似乎我最终做了类似的事情,请将其称为这个问题的“最佳”解决方案。

阅读上Swing教程的部分


其中一个示例演示了如何向选项卡添加“关闭”按钮。您应该能够轻松地修改代码以添加“+”按钮。

阅读上Swing教程的部分


其中一个示例演示了如何向选项卡添加“关闭”按钮。您应该能够轻松地修改代码以添加“+”按钮。

阅读上Swing教程的部分


其中一个示例演示了如何向选项卡添加“关闭”按钮。您应该能够轻松地修改代码以添加“+”按钮。

阅读上Swing教程的部分



其中一个示例演示了如何向选项卡添加“关闭”按钮。您应该能够轻松地修改代码以添加“+”按钮。

因此,是的,当您有多个选项卡时,该功能可以正常工作。。。但我希望+在只有1个选项卡时调用侦听器(就像按钮一样)。我更新了问题,使之更清楚。谢谢你的帮助。编辑了问题。我相信您无法在选项卡上建立侦听器,因为没有进行新的选择。相反,您可以覆盖选择模型上的行为。谢谢。。。这是非常接近我要找的。唯一的问题是,事件仅在第一次单击选项卡时发生。有没有关于如何使其可重复的想法?请重新编辑。通过删除默认行为“super.setSelectedIndex(index);”,选择会在多次单击时不断重复。将ChangeListener添加到选项卡式窗格将实现同样的效果,而无需替换SelectionModel,如果用户出于其他原因需要替换SelectionModel,则可能会导致问题……因此,是的,当您有多个选项卡时,该选项有效。。。但我希望+在只有1个选项卡时调用侦听器(就像按钮一样)。我更新了问题,使之更清楚。谢谢你的帮助。编辑了问题。我相信您无法在选项卡上建立侦听器,因为没有进行新的选择。相反,您可以覆盖选择模型上的行为。谢谢。。。这是非常接近我要找的。唯一的问题是,事件仅在第一次单击选项卡时发生。有没有关于如何使其可重复的想法?请重新编辑。通过删除默认行为“super.setSelectedIndex(index);”,选择会在多次单击时不断重复。将ChangeListener添加到选项卡式窗格将实现同样的效果,而无需替换SelectionModel,如果用户出于其他原因需要替换SelectionModel,则可能会导致问题……因此,是的,当您有多个选项卡时,该选项有效。。。但我希望+在只有1个选项卡时调用侦听器(就像按钮一样)。我更新了问题,使之更清楚。谢谢你的帮助。编辑了问题。我相信您无法在选项卡上建立侦听器,因为没有进行新的选择。相反,您可以覆盖选择模型上的行为。谢谢。。。这是非常接近我要找的。唯一的问题是,事件仅在第一次单击选项卡时发生。有没有关于如何使其可重复的想法?请重新编辑。通过删除默认行为“super.setSelectedIndex(index);”,选择会在多次单击时不断重复。将ChangeListener添加到选项卡式窗格将实现同样的效果,而无需替换SelectionModel,如果用户出于其他原因需要替换SelectionModel,则可能会导致问题……因此,是的,当您有多个选项卡时,该选项有效。。。但我希望+在只有1个选项卡时调用侦听器(就像按钮一样)。我更新了问题,使之更清楚。谢谢你的帮助。编辑了问题。我相信您无法在选项卡上建立侦听器,因为没有进行新的选择。相反,您可以覆盖选择模型上的行为。谢谢。。。这是非常接近我要找的。唯一的问题是,事件仅在第一次单击选项卡时发生。有没有关于如何使其可重复的想法?请重新编辑。通过删除默认行为“super.setSelectedIndex(index);”,选择会在多次单击时不断重复。将ChangeListener添加到选项卡式窗格将实现同样的效果,而无需替换SelectionModel,如果您出于其他原因需要更换SelectionModel,这可能会导致问题……这不是我要问的。。我想在单击+选项卡时触发一个事件,而它是唯一的选项卡。@dubdot,
但我想在只有一个选项卡时,+调用侦听器(像按钮一样)。
您当前的代码不起作用,因为您没有生成ChangeEvent
JPanel blankJPanel1 = new JPanel();
this.addTab("+", blankJPanel1);
setModel(new DefaultSingleSelectionModel() {

    @Override
    public void setSelectedIndex(int index) {
        System.out.println("woah!");
    }
});
JPanel blankJPanel = new JPanel();
this.addTab("dummy text", blankJPanel);
JLabel label = new JLabel("x");
label.setBorder(BorderFactory.createEmptyBorder(0, 10, 0, 10));
label.addMouseListener(new MouseAdapter() {
    @Override
    public void mouseClicked(MouseEvent e) {
        System.out.println("woah!!");
    }
});


setTabComponentAt(indexOfComponent(blankJPanel), label);